Azure API管理 - 范围声明为NULL

时间:2014-10-21 22:20:31

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

在使用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不包含任何范围声明。有什么东西我缺失或没有正确做到吗?任何帮助都将非常感激。

1 个答案:

答案 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接口。

希望有所帮助。