gpt4 book ai didi

Azure API 管理 - 范围声明 NULL

转载 作者:行者123 更新时间:2023-12-02 08:08:42 25 4
gpt4 key购买 nike

在使用 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 对象中的声明,但没有看到范围。我的理解是,如果我下载 list 并上传包含应用程序权限的 list ,则可以在 API 中使用它来验证调用应用程序是否具有正确的范围。以下是我的应用程序 list (仅限 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 token 中返回的声明取决于您正在使用的 OAuth 流程以及您定义的权限。

使用 Azure AD 实现 OAuth 时,您始终需要(至少)两个向 Azure AD 注册的应用程序:一个 API 提供程序和一个或多个 API 使用者。根据您要实现的流程,您还需要用户配合。

让我们首先选择最简单的情况:客户端凭据流程。在 CC 流程中,您没有涉及任何用户,唯一重要的权限是应用程序权限。现在,这有点棘手,这些并不像 scp 声明那样反射(reflect)在 JWT token 中,而是作为包含 appRolesroles 反射(reflect)>(参见documentation)消费者应用程序。这些“应用程序角色”需要在 API 提供应用程序的 list 中定义,就像 appPermissions 一样。

仅当您使用的流还包含用户(例如授权代码授予或资源所有者密码授予)时,您才会在 token 中看到 scp 声明(如果您已定义相应的声明)使用AD接口(interface)的权限。

关于Azure API 管理 - 范围声明 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com