在使用 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 值始终为空。我确实看到了 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 应用程序选择多个“作用域”时,JWT 返回的 JWT 不包含任何作用域声明。有什么我遗漏或做得不对的吗?