在使用Azure注册我已经开发的API后,我对SCP声明有疑问。我已经关注了各种教程和示例应用程序。一切都正确验证,我可以主要使用本教程从受信任的子系统调用API方法:https://github.com/AzureADSamples/WebApp-WebAPI-OAuth2-AppIdentity-DotNet
我遇到的问题是当我试图验证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"
}
]
提前谢谢你...保罗
因此,在进一步游戏并为API创建多个appPermissions并允许客户端Web应用程序选择多个" Scopes"返回的JWT不包含任何范围声明。有什么东西我缺失或没有正确做到吗?任何帮助都将非常感激。
答案 0 :(得分:1)
您在JWT令牌中返回的声明取决于您使用的OAuth流程以及您定义的权限。
使用Azure AD实施OAuth时,您始终需要(至少)在Azure AD中注册的两个应用程序:一个API提供程序和一个或多个API使用者。根据您正在实施的流程,您还需要用户使用它。
首先选择最简单的案例:客户端凭证流程。在CC Flow中,您没有涉及任何用户,唯一重要的权限是应用程序权限。现在,这有点棘手,这些并未作为scp
声明在JWT令牌中反映出来,而是作为roles
包含appRoles
(请参阅documentation消费者应用程序。这些" App Roles"需要在API提供应用程序的清单中定义,就像appPermissions
一样。
只有当您使用包含用户的Flow时,如授权代码授予或资源所有者密码授予,如果您使用以下内容定义了相应的权限,您将在令牌中看到scp
声明。 AD接口。
希望有所帮助。