如何在 Azure Ad B2C 上使用自定义角色?

How can I use Custom Roles on Azure Ad B2C?

我的 API 需要三种类型的用户,我想使用自定义角色定义来管理它。是否可以在 Azure B2c 上创建角色,然后通过 Microsoft Graph 将这些角色分配给用户 API?

您可以创建一个名为 extension_role 的扩展属性,然后使用图形 API 将角色名称写入该属性。

有关如何创建和写入扩展属性的示例 here

然后在 AAD B2C 自定义策略中,读取扩展属性并将其插入到令牌中。

例如,读取符号上的属性in/up:

        <TechnicalProfile Id="AAD-UserReadUsingObjectId">
          <Metadata>
            <Item Key="Operation">Read</Item>
            <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
          </Metadata>
          <IncludeInSso>false</IncludeInSso>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="extension_role" />
          </OutputClaims>
          <IncludeTechnicalProfile ReferenceId="AAD-Common" />
        </TechnicalProfile>

插入令牌:

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="extension_role" />
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
        <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />

      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>

我正在朝着同一个目标努力,所以这是我直到现在才发现的:

  • 将自定义策略与 Identity Esperience Framework (IEF) 结合使用:这是一个 example of custom policies on RBAC example
  • 使用已连接用户的 objectId 和访问令牌手动调用图形 API(使用 msal 库)以获得用户所属的组:在这种情况下,您将创建一个组对于每个角色,根据他们的角色将用户影响到正确的组,通过找到用户组,你知道他的角色是什么,这里是 example 在 .Net5 web [=23= 上实现这种授权] 和网络应用程序。

没有找到任何与使用角色管理用户访问权限相关的内容,所以如果您找到任何内容,请毫不犹豫地与我们分享。谢谢