web-dev-qa-db-ja.com

MVCコアすべてのアクションにグローバル認証を強制/設定する方法は?

MVC Coreのすべてのアクションにグローバル認証を強制/設定する方法

グローバルフィルターの登録方法を知っています-たとえば、

_Setup.cs

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});
_

これは正常に機能しますが、Authorizeに同じものを追加することはできません。

options.Filters.Add(new AuthorizeAttribute());

エラーがあります:

Cannot convert from 'Microsoft.AspNet.Authorization.AuthorizeAttribute()' to 'System.Type'

(Method .Add() needs IFilterMetadata type)


同様の質問から、これはMVC4-5で機能することがわかっています...したがって、MVCコアで何かを変更する必要があります...

誰かが何か考えている?

53
Lukasz Makowej
services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});
91
blowdart

StartUp.csのConfigureServicesに次を追加します。これは、トークンの検証のためであり、すべての呼び出しがトークンで検証するように強制します。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });

services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })`

これをStartUp.csのConfigureメソッドに追加します。

app.UseAuthentication();

注:不要な場合は[AllowAnonymous]を使用してください

1
Rohan Shenoy