8

AspNetAuthorizationチュートリアルでIdentityServer4をテストしているときに、単純なものを追加しました。それ以来、次のエラーが発生します。[Authorize(Roles = "Administrator")]

AuthenticationScheme: Bearer は禁止されていました。

私のユーザーは次のクレームを持っています: new Claim(ClaimTypes.Role, "Administrator", ClaimValueTypes.String).

メソッドConfigureServices内:

 services.AddAuthorization(options =>
        {
            options.AddPolicy("AdministratorOnly", policy => policy.RequireRole("Administrator"));
        });

        services.AddMvc(config =>
        {
            var policy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();

            config.Filters.Add(new AuthorizeFilter(policy));
        });

そしてConfigure方法で:

   app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions()
        {
            Authority = "http://localhost:5000",
            ScopeName = "openid",
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            RequireHttpsMetadata = false,
        });

デバッグ出力:

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Debug: Executing action LearningEntityServer4.OAuth.ValuesController.Get (LearningEntityServer4.OAuth)
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization was successful for user: myuser.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization failed for user: myuser.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Warning: Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
Microsoft.AspNetCore.Mvc.ChallengeResult: Information: Executing ChallengeResult with authentication schemes ().
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware: Information: AuthenticationScheme: Bearer was forbidden.

構成で見逃したものは何ですか?

PS:私はすでにこのSO投稿をチェックしましたが、成功しませんでした。

4

3 に答える 3

15

私はついに、クレームの世界でロール チェックがどのように機能するかの内部を書き上げる時間を見つけました。

https://leastprivilege.com/2016/08/21/why-does-my-authorize-attribute-not-work/

つまり、ロールに使用するクレーム タイプが ClaimsIdentity の RoleClaimType と一致することを確認してください。または、ポリシーで に置き換えRequireRoleて、適切なタイプを使用してください。RequireClaim

于 2016-08-21T09:59:03.227 に答える
0

添付されたリソースによると、実際には so のようにポリシー名を authorize 属性に配置する必要があるよう[Authorize("AdministratorOnly")]です。

https://damienbod.com/2016/02/14/authorization-policies-and-data-protection-with-identityserver4-in-asp-net-core/

于 2016-08-20T07:49:45.177 に答える