首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于范围/角色的Azure AD B2C授权支持

基于范围/角色的Azure AD B2C授权支持
EN

Stack Overflow用户
提问于 2022-05-19 12:50:56
回答 1查看 509关注 0票数 0

我们希望在API中实现授权。

例如。我们有API和API,它们都暴露在不同的消费者面前.

我们已经在IdentityServer4中设置了基于范围的授权,在这里我们用不同的策略来装饰端点。使用IdentityServer4,我们能够实现这一点,因为IdentityServer4令牌在所有授予类型中都有作用域声明,但是使用Azure,我们发现不能在用客户端凭据流生成的令牌中具有范围声明。

在我们的例子中,Web也暴露给了消费者,他们同样具有基于范围的授权。为了调用Web中的Web,我们使用客户端凭据流,它将没有范围声明作为标记,因此我们无法授权我们对Web的调用。

如何在微服务体系结构中使用Azure AD实现基于范围的授权,其中我们从一个上下文调用其他上下文API。

EN

回答 1

Stack Overflow用户

发布于 2022-05-20 10:46:39

  1. 当您使用you get roles客户端凭据流和使用应用程序权限时,不要使用范围,即令牌中的scp声明。
  2. 应用程序权限是赋予应用程序本身的某种角色,客户端凭据中的作用域应该用作api:///..default。它们只在进行客户端凭据身份验证时应用,在没有用户涉及的情况下使用。请参阅https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-access-web-apis#add-permissions-to-access-your-web-api
  3. Scopes通常是仅在用户涉及登录过程中的时才适用的委托权限。它们允许您仅在用户上下文中代表用户(即;)行事,在发生客户凭据流.的情况下,我们将得到scp声明。

请参阅azure-基于广告范围的授权

  • 因此,如果希望获得委托权限,则必须使用隐式授予流而不是客户端凭据。
  • 由于公开api页面中的作用域用于授权代码授予流,而在涉及用户的地方,在这种情况下(客户端凭据)是不可能的,因此我们必须添加自己的作用域,以便应用程序可以使用这些作用域,这些作用域是我们需要在应用程序注册中的批准下或通过应用程序角色刀片间接添加到清单中的角色。

例:

代码语言:javascript
复制
 {
      "appRoles": [
      {
         "allowedMemberTypes": [
            "Application"
          ],
          "displayName": "Read all todo items",
          "id": "f8dxxxxxxxxxxxxf98",
          "isEnabled": true,
          "description": "Allow the application to read all todo items as itself.",
          "value": "Todo.Read.All"
        }
      ]
    }

在那之后,这些人必须得到行政许可。

因此,现在当请求一个默认范围为api://<app id>/.default的令牌时,角色声明中将返回“作用域”。

因此,我们可以使用角色声明作为授权目的。

同时也是一项工作

请确保添加额外的作用域,如profileoffline_access open_id。给response_type=token而不是id_token

示例请求:

代码语言:javascript
复制
......&redirect_uri=https://jwt.io&scope=openid profile offline_access&response_type=token&prompt=login

参考资料:

  1. 使用Azure的API中基于范围的授权- IT通才(wordpress.com)
  2. 范围未添加到从Azure Ad - Stack溢出返回的访问令牌中。

编辑:

  1. 要从其他api调用web,需要在一个api中定义范围,即您要调用的api2,并且在调用api(api1)时需要选择这些作用域。请通过这个过程这里
  2. 在第一次登录时,Api包括请求中的作用域,并尝试将响应类型作为令牌,并查看scp是否可用,或者使用idtoken https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_TenantSignUpIn&client_id=<appid>&nonce=defaultNonce&redirect_uri=https://jwt.ms&scope=openid offline profile https://tenant.onmicrosoft.com/b2capi/write https://tenant.onmicrosoft.com/b2capi/read https://tenant.onmicrosoft.com/b2capi/user_impersonation&response_type=id_token&prompt=login

请注意,根据流类型,作用域作为角色存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72304890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档