1

У меня есть вопрос относительно претензии SCP после использования Azure для регистрации API, который я разработал. Я следил за различными учебниками и примерами приложений. Все проверяет правильно и я могу вызвать метод API из доверенной подсистемы, используя в первую очередь этот учебник: https://github.com/AzureADSamples/WebApp-WebAPI-OAuth2-AppIdentity-DotNetУправление API Azure - заявка на охват NULL

Проблема, которую я имею, когда я пытаюсь подтвердить претензии SCP:

Claim scopeClaim = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope"); 

Значение scopeClaim всегда равно null. Я вижу претензии в объекте ClaimsPrincipal.Current, но не в Scope. Я понимаю, что если я загружу манифест и загружу его с включенным разрешением приложения, он будет доступен в API для проверки правильности области действия вызывающего приложения. Ниже мой манифест приложения (только appPermissions):

"appPermissions": [ 
    { 
     "claimValue": "access.fullaccess", 
     "description": "Allow the application full access to the service on behalf of the signed-in user", 
     "directAccessGrantTypes": [], 
     "displayName": "Have full access to the service", 
     "impersonationAccessGrantTypes": [ 
     { 
      "impersonated": "User", 
      "impersonator": "Application" 
     } 
     ], 
     "isDisabled": false, 
     "origin": "Application", 
     "permissionId": "52966341-1bb5-4e9f-b4f6-46aad4d03b33", 
     "resourceScopeType": "Personal", 
     "userConsentDescription": "Allow the application full access to the service on your behalf", 
     "userConsentDisplayName": "Have full access to the service" 
    } 
    ] 

Спасибо заранее ... Paul

Так при дальнейшем играть вокруг и создания нескольких appPermissions для API и позволяет клиенту веб-приложение, чтобы выбрать несколько «Области», возвращаемые JWT, не содержат каких-либо претензий по охвату. Есть что-то, что я упускаю или не делаю правильно? Любая помощь будет очень оценена.

ответ

1

Требования, которые вы возвращаете в токене JWT, зависят от используемого вами потока OAuth и от разрешенных вами разрешений.

При использовании Azure AD для реализации OAuth вам всегда понадобятся (по крайней мере) два приложения, зарегистрированные с Azure AD: один поставщик API и один или несколько пользователей API. В зависимости от того, какой поток вы реализуете, вам также потребуются пользователи для этого.

Давайте сначала рассмотрим простейший случай: поток учетных данных клиента. В CC Flow у вас нет пользователей, и важными являются только разрешения. Теперь, и это немного сложно, они не отражены в токенах JWT как претензии scp, а скорее как roles, содержащие appRoles (см. documentation) Потребительского приложения. Эти «Роли приложений» должны быть определены, как и appPermissions, в манифесте API-приложения.

Только если вы используете поток, который также содержит пользователя, например грант авторизационного кода или грант пароля владельца ресурса, вы увидите в своем токене заявки scp, если вы определили соответствующие разрешения с использованием интерфейса AD.

Надеюсь, что это поможет.

+0

Это возможно, если приложение Logic является потребителем API? В настоящее время вся документация, которую мы прочитали, не помогла. – M0rty