【问题标题】:Azure API Management - Scope Claim NULLAzure API 管理 - 范围声明 NULL
【发布时间】:2014-12-17 07:22:49
【问题描述】:

在使用 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 创建多个 appPermission 并允许客户端 Web 应用程序选择多个“作用域”时,JWT 返回的 JWT 不包含任何作用域声明。有什么我遗漏或做得不对的吗?

【问题讨论】:

    标签: azure oauth-2.0 asp.net-web-api2 claims-based-identity azure-api-management


    【解决方案1】:

    您在 JWT 令牌中返回的声明取决于您使用的 OAuth 流程以及您定义的权限。

    使用 Azure AD 实现 OAuth 时,您将始终需要(至少)两个在 Azure AD 中注册的应用程序:一个 API 提供者和一个或多个 API 使用者。根据您正在实施的流程,您还需要用户参与其中。

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

    仅当您使用还包含用户的流时,例如授权码授予或资源所有者密码授予,如果您已使用 AD 接口定义了相应的权限,您将在令牌中看到 scp 声明.

    【讨论】:

    • 如果逻辑应用程序作为 API 使用者,这可能吗?目前我们阅读的所有文档都没有帮助。
    • 我发现的一件事是,当使用client_credentials请求令牌时,需要传递资源参数并用API Provider AppId填充。如果没有资源参数,则返回令牌,但没有应用角色。
    猜你喜欢
    • 2017-11-16
    • 2010-10-02
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多