我已将 Azure AD B2C 设置为允许用户使用自定义策略从“常规”AAD 目录进行身份验证,如下所述https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-目录-b2c-setup-aad-自定义。在一种情况下,我希望用户进行注册(使用其 AAD 凭据进行身份验证,在 AAD B2C 目录中创建相应的对象,并将 objectidentifier 作为声明传递给我的应用程序),而不提供任何进一步的信息。从示例开始,我无法弄清楚如何完全跳过自我断言步骤。我尝试过的两种方法是
1) 删除SelfAsserted-Social ClaimsExchange,以及 2) 修改(实际上是复制到 TrustFrameworkExtensions、重命名和编辑)SelfAsserted-Social和AAD-UserReadUsingObjectId ClaimsExchanges,以便唯一的 OutputClaim 条目不需要用户提示。
在这两种方法中,从 UI 角度来看,注册似乎都有效,但不会在 B2C 目录中创建用户对象。使用 App Insights,在两种方法中AAD-UserReadUsingObjectId似乎都会生成Microsoft.Cpim.Common.PolicyException。
完整的用户旅程是
<UserJourney Id="SignUpAAD">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="KDEWEbAppTestExchange" />
</ClaimsProviderSelections>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="KDEWebAppTestExchange" TechnicalProfileReferenceId="KDEWebAppTestProfile" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- prepare ground for searching for user …Run Code Online (Sandbox Code Playgroud) 我很难让我的 Azure B2C 续订程序正常工作。因此,如果当我访问 x-ms-cpim-sso:myApp.onmicrosoft.com_0 下的登录 URL (login.microsoftonline.com) 时我的 cookie 可见,是否有办法解码其值?
我想查看它何时到期以及其他相关信息。
使用 LinkedIn 作为具有 Identity Experience Framework 的社交提供商登录时,声明sub有时会在声明值中返回以下错误消息:
"Not supported currently. Use oid claim."
Run Code Online (Sandbox Code Playgroud)
该错误似乎是随机出现的,而不是在每个请求上出现。在https://jwt.ms中检查时,我们的测试帐户获得了正确的索赔子
在 Application Insights 中检查 UserJourneyRecorder 的日志文件时,发现了错误消息并追溯到我们的应用程序。
在策略文件中,错误似乎源自声明转换器CreateSubjectClaimFromAlternativeSecurityId
<ClaimsTransformation Id="CreateSubjectClaimFromAlternativeSecurityId" TransformationMethod="CreateStringClaim">
<InputParameters>
<InputParameter Id="value" DataType="string" Value="Not supported currently. Use oid claim." />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="sub" TransformationClaimType="createdClaim" />
</OutputClaims>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)
我认为 Azure AD B2C 应该在此处抛出异常,而不是在单个声明中给出错误消息?
如果我在 Aure AD B2C 中有一个基于 Azure AD(企业)身份创建的用户(如下所述: https: //learn.microsoft.com/en-us/azure/active-directory-b2c/active- Directory-b2c-setup-aad-custom),AADB2C 中是否存储了一个属性,允许我在 AAD 中查找(使用 Graph API 或类似 API)用户对象?我看到 AADB2C 属性中有 userPrincipalName和IssuerUserId,但对我来说,这两个属性是否与 AAD 中存储的任何值匹配并不明显。
谢谢!
马丁
当我通过以下方式登录时loginRedirect我可以看到重定向上填充了 MSAL 令牌,但是当尝试使用该令牌时,我收到此错误:
无法以静默方式从存储中检索令牌。
AADB2C90077:用户没有现有会话,并且在通过连接到 Azure B2C 的 Angular SPA 应用成功登录后,请求提示参数的值为“无”。
我在GitHub Issue中发现了类似的内容,然后在由于没有令牌而被迫执行此操作后出现错误后对另一个问题进行了评论:tokenPopup()
“此应用程序没有足够的权限对此 Web 资源执行该操作”
他们可能没有关系,但他们都阻止了我
在此代码中,loginredirect可以工作,我可以在本地存储中看到令牌,然后下次使用令牌时,我会收到控制台日志,authCallback-err然后记录“无法从存储中静默检索令牌...”并首先提到错误。
@Injectable()
export class MsalService {
private access_token: string;
private tenantConfig = {
tenant: environment.tenant,
clientID: environment.clientID,
signUpSignInPolicy: environment.signUpSignInPolicy,
b2cScopes: environment.b2cScopes
};
private authority = "https://login.microsoftonline.com/tfp/" +
this.tenantConfig.tenant +
"/" +
this.tenantConfig.signUpSignInPolicy;
private clientApplication: Msal.UserAgentApplication;
private authCallback(errorDesc: any, token: any, error: any, tokenType: any) {
var _this = this;
console.log("authCallback");
// For loginRedirect, tokenType …Run Code Online (Sandbox Code Playgroud) 我们有一个使用自定义身份体验框架策略通过 Azure AD B2C 进行保护的 Web 应用程序,允许用户使用社交身份(Microsoft、Google、Facebook)或来自另一个联合 Azure AD 实例的身份或“本地身份”进行注册和登录。 ' 电子邮件/密码帐户。
所有社交帐户和联合 AD 均正常工作。使用电子邮件/密码注册和登录工作正常,但我们现在遇到错误。自从我们最后一次知道电子邮件/密码配置正常工作以来,我们没有故意对我们的电子邮件/密码配置进行任何更改,因此我们不确定这是如何发生的。
问题是:使用新电子邮件地址注册工作正常,并且在该过程完成后,用户正确登录,并且他们的帐户出现在目录中。但是,如果用户注销,则任何重新登录的尝试都会失败:
(显示的电子邮件地址不是实际的。多个用户使用新旧电子邮件/密码组合重复出现错误。)
深入研究门户,发现根本错误如下:
70001 在名为 Y 的租户中找不到名为 X 的应用程序。如果该应用程序尚未由租户管理员安装或未经租户中任何用户同意,则可能会发生这种情况。您可能已将身份验证请求发送给了错误的租户。
此错误有时似乎与未能向门户中的应用程序授予权限有关。我们已尝试删除和恢复所有权限,并重新授予权限。这并没有解决问题。
有谁知道可能导致此问题的原因,特别是为什么注册/登录可以正常工作,但返回登录却不能?
更新:
只是为了确认我们在 AD 目录中配置了 IEF 和代理 IEF 应用程序:

我们login-NonInteractive在 TrustFrameworkExtensions.xml 中配置了技术配置文件:

连接 Application Insights 后(按照这些说明https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-troubleshoot-custom),我们就能够做到这一点更详细的错误:
AADSTS70001:在 weapageengine.onmicrosoft.com 目录中找不到标识符为“ProxyIdentityExperienceFrameworkAppID”的应用程序
在我们的任何自定义策略中出现的唯一位置“ProxyIdentityExperienceFrameworkAppID”显示在上面的 XML 片段中,但这根据此处的文档似乎是正确的: https: //github.com/Azure-Samples/active-directory-b2c-custom -policy-starterpack/blob/3b4898fec3bf0014b320beffa6eb52ad68eb6111/SocialAndLocalAccounts/TrustFrameworkExtensions.xml#L38 - 除非我们也打算更新这些“DefaultValue”属性?
解决方案: 根据下面的答案,有必要使用相关应用程序 ID 更新元数据和默认值。值得注意的是,在 GitHub 示例https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/blob/3b4898fec3bf0014b320beffa6eb52ad68eb6111/SocialAndLocalAccounts/TrustFrameworkExtensions.xml#L38中,样板值的大小写不同,导致替换全部中缺少的一个:
active-directory azure azure-active-directory azure-ad-b2c identity-experience-framework
在我的 B2C 租户中,我添加了一个新的自定义用户属性:org
我已添加org为声明,以便当用户登录时我可以看到自定义声明。
我现在想在代码中更新这个值。我尝试PATCH向适当的端点发送请求:
https://graph.windows.net/myb2c.onmicrosoft.com/users/userObjectId?api-version=1.6
但收到以下错误:
指定的一个或多个属性值无效。
这是我发送的 JSON:
{ "extension_org": "1234" }
Run Code Online (Sandbox Code Playgroud)
我需要用其他方法更新这个值吗?
截图供参考:
我msal.js在我的 React 应用程序中使用 Azure AD B2C。
目前,当用户尝试进入我的应用程序的受保护区域时,msal.js会将用户重定向到登录页面,该页面提供指向注册页面的链接。
有没有办法让我直接将用户发送到注册页面?在某些情况下,我知道用户尚未注册,因此首先将用户发送到登录页面,然后让他们单击并转到注册页面,这是很糟糕的用户体验。最好直接让他们注册。
我们使用 Microsoft 的 webapp 示例在前端的 Umbraco 中实现了 Azure AD B2C https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
大多数情况下,这通常是有效的,但一段时间后,每个人都开始受到重定向循环的影响。重新访问该网站即可解决问题。
当用户使用 id 令牌重定向回站点时,这似乎是导致 .AspNet.Cookies cookie 停止设置的原因。
有任何想法吗?
azure-ad-b2c ×10
azure ×4
identity-experience-framework ×2
adal ×1
adal.js ×1
asp.net-mvc ×1
msal.js ×1
oauth-2.0 ×1
owin ×1
typescript ×1
updates ×1