【发布时间】:2020-07-05 04:31:34
【问题描述】:
我正在尝试从以下 URL 上的这个 repo 获取示例项目。
https://github.com/azure-ad-b2c/samples/tree/master/policies/invite
示例项目包括一个自定义 B2C 策略 SignUpInvitation.xml 和一个 Web 项目。我的基本理解是,包含的自定义策略本质上需要一个签名令牌才能访问该策略。该示例基本上将此用作“邀请”步骤来限制对注册策略的访问。这就是我所追求的,所以我相信这个样本为我指明了正确的方向。我现在只是想让它工作。
我的问题是,在配置了我认为是所有必需的设置后,我从 B2C 策略中收到了一个错误 - 我认为。因此,我将首先介绍如何产生错误的步骤。
产生错误
我运行提供的网络项目并输入我的电子邮件,然后单击邀请。我收到了邀请电子邮件,其中包含指向自定义 B2C 策略的链接 - SignUpInvitation.xml。我单击该链接并转到该政策,但得到的页面显示发生了异常:
AADB2C:发生异常
找不到任何其他调试信息,我们将 Application Insights 配置添加到自定义策略,以便将输出记录到 App Insights。现在,在 AI 中,我可以看到该策略正在产生以下错误...
{
""Kind"": ""Action"",
""Content"": ""Web.TPEngine.StateMachineHandlers.GetRelyingPartyInputClaimsHandler""
},
{
""Kind"": ""FatalException"",
""Content"": {
""Time"": ""7:05 PM"",
""Exception"": {
""Kind"": ""Handled"",
""HResult"": ""80004003"",
""Message"": ""Object reference not set to an instance of an object."",
""Data"": {}
}
}
}
所以,有一个明显的错误,但消息仍然有点模糊。这就是我卡住的地方。我不确定如何进一步调试并查明导致引用错误的原因。
我调查的事情
通过调试过程,我基本上查看了我能找到的关于此的所有信息。我只是不太精通 B2C 策略 XML 脚本,这似乎是一个非常深入和技术性的话题。这是我有兴趣学习的主题,但需要一些关于如何调试脚本等的帮助。
我注意到的一件事是上述错误中的Action 提到它正在获取输入声明。因此,在我看来,在获取索赔时,政策或我的配置可能存在问题。因此,我在 App Insights 中查找上述消息的“堆栈跟踪”,并找到了以下操作和结果......
{
""Kind"": ""Predicate"",
""Content"": ""Web.TPEngine.StateMachineHandlers.InitiatingMessageValidationHandler""
},
{
""Kind"": ""HandlerResult"",
""Content"": {
""Result"": false,
""RecorderRecord"": {
""Values"": [
{
""Key"": ""Validation"",
""Value"": {
""Values"": [
{
""Key"": ""SubmittedBy"",
""Value"": ""Application""
},
{
""Key"": ""ProtocolProviderType"",
""Value"": ""OpenIdConnectProtocolProvider""
}
]
}
}
]
},
""Statebag"": {
""MSG(e4c7c6a9-8023-4cf7-9a34-c920e8325284)"": {
""c"": ""2020-03-20T19:05:48.1325292Z"",
""k"": ""MSG(e4c7c6a9-8023-4cf7-9a34-c920e8325284)"",
""v"": ""{\""TenantId\"":\""wibradixdev.onmicrosoft.com\"",\""PolicyId\"":\""B2C_1A_signup_invitation\"",\""RedirectUri\"":\""https://jwt.ms/\"",\""AdditionalParameters\"":{\""TEST\"":\""TEST\"",\""p\"":\""B2C_1A_signup_invitation\""},\""Nonce\"":\""0eefd73e94224dc69d8766dd219180e6\"",\""ClientId\"":\""30639331-3c2c-4ade-8c36-814dfe007170\"",\""ResponseType\"":\""id_token\"",\""ResponseRedirector\"":{\""URI\"":\""https://jwt.ms\"",\""D\"":false,\""WF\"":true},\""Scope\"":\""openid\"",\""AppModelVersion\"":1,\""ScopedProviders\"":[]}"",
""p"": true,
""t"": ""OAuth2""
},
""CMESSAGE"": {
""c"": ""2020-03-20T19:05:48.1325292Z"",
""k"": ""CMESSAGE"",
""v"": ""e4c7c6a9-8023-4cf7-9a34-c920e8325284"",
""p"": true
},
""IMESSAGE"": {
""c"": ""2020-03-20T19:05:48.1325292Z"",
""k"": ""IMESSAGE"",
""v"": ""e4c7c6a9-8023-4cf7-9a34-c920e8325284"",
""p"": true
},
""ComplexItems"": ""_MachineEventQ, TCTX, ORCH_IDX, REPRM, IC""
},
""PredicateResult"": ""True""
}
}
这个动作似乎是在做某种类型的验证,但我注意到结果返回false,这通常意味着某种失败?在这种情况下我不确定。
我该如何进行?
为什么这个策略会抛出异常?
我将示例 Web 项目部署到 Azure,如果您想查看我看到的内容,可以访问 here。
另外,here is a link to the full error text,来自 App Insights。这链接到我的 Github 问题,用于相同的相关问题。
编辑
这是要求的技术简介部分...
<ClaimsProvider>
<DisplayName>My ID Token Hint ClaimsProvider</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="IdTokenHint_ExtractClaims">
<DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
<Protocol Name="None" />
<Metadata>
<!--Sample action required: replace with your endpoint location -->
<Item Key="METADATA">https://wibradixdev.b2clogin.com/wibradixdev.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1A_signup_invitation</Item>
<!-- <Item Key="IdTokenAudience">your_optional_audience_override</Item> -->
<!-- <Item Key="issuer">your_optional_token_issuer_override</Item> -->
</Metadata>
<OutputClaims>
<!--Sample: Read the email cliam from the id_token_hint-->
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
【问题讨论】:
-
OIDC 技术配置文件中配置的元数据端点中的 JWKS 端点有问题。元数据 url 是什么?
-
Jas,这让我有点过头了,如果我误解了你的要求,请原谅我。我认为您要的是策略发现端点?不过,我不确定这是否是您所说的技术资料。 Here is the discovery endpoint 作为我帖子中提到的示例的一部分的自定义政策。
-
听起来您没有像从我们的日志中看到的那样涉及联合 IdP。你能分享一个指向你的政策文件的链接吗(它们不需要被审查)?
-
@JasSuri 我编辑了我的原始帖子以包含您所说的技术简介部分。我尝试将其设置为 ASP 项目的知名链接和 B2C 策略的知名链接 - 都产生了相同的错误。
标签: azure azure-ad-b2c