Выполняет ли IdentityServer4.AccessTokenValidation автоматическое инспектирование информации о пользователе? - PullRequest
0 голосов
/ 04 января 2019

Я использую Identity Server для защиты моего API. Я определил ApiResource как это:

return new List<ApiResource> 
        {
            new ApiResource
            {
                Name = "phone.api",
                ApiSecrets={new Secret("secret1".Sha256())},
                Scopes =
                {
                    new Scope()
                    {
                        Name = "phone.api.full_access",
                        DisplayName = "Full access to API"

                    },
                     new Scope
                    {
                        Name = "phone.api.write",
                        DisplayName = "Write and read access to API"
                    },
                    new Scope
                    {
                        Name = "phone.api.read",
                        DisplayName = "Read only access to API"
                    }
                }
                ,UserClaims=new List<string>()
                {
                    "roles",
                   // ClaimTypes.DateOfBirth
                }
            },

И такой тестовый пользователь:

new TestUser
{
   SubjectId = "1",
   Username = "Billy Admin",
   Password = "password",
   Claims = new List<Claim>()  
   {
      new Claim("roles", "phone.api.admin"),
       new Claim(ClaimTypes.DateOfBirth,new DateTime(1900,10,10).ToString())
   }
 }

API защищен следующим кодом:

services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = Config.AUTHAUTHORITY; //"http://localhost:4000";
                options.ApiName = "phone.api";
                options.ApiSecret = "secret1";
                options.RequireHttpsMetadata = false;
            });

У меня есть вопрос, если, когда client + access_token (не содержащий утверждение ClaimTypes.DateOfBirth), API автоматически вызовет конечную точку информации пользователя на сервере полномочий для получения дополнительных требований. Причина, по которой мне нужны дополнительные претензии, заключается в том, что они проверяют некоторые правила, такие как:

services.AddAuthorization(options =>
{
     options.AddPolicy("Only21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21)));
} );

Мои тесты показывают, что он не вызывает конечную точку userinfo, и я хочу знать, почему. Должен ли я назвать это по-своему AuthorizationHandler<MinimumAgeRequirement>?

Большое спасибо.

1 Ответ

0 голосов
/ 07 января 2019

Вопрос Бадулаке интересен: как вы управляете утверждениями API в архитектуре OAuth таким образом, который действительно лучше всего работает для API?

Это не просто вопрос технологии OAuth - это скорее вопрос разработки расширяемости API. Я обнаружил, что управление данными утверждений в API работает лучше всего, и для обеспечения их эффективности обычно используется кэширование утверждений.

Из интереса, вот пример кода .Net, который реализует вышеупомянутую архитектуру:

Недавно я занимался некоторыми API-интерфейсами AWS без сервера, и было интересно узнать, что шлюз API AWS также использует этот тип подхода.

...