Azure active directory Azure AD B2C自定义注册邀请策略在尝试命中元数据终结点时返回401

Azure active directory Azure AD B2C自定义注册邀请策略在尝试命中元数据终结点时返回401,azure-active-directory,azure-ad-b2c,http-status-code-401,invitation,Azure Active Directory,Azure Ad B2c,Http Status Code 401,Invitation,我实现了这里描述的内容: 当Azure应用程序服务使用B2C Azure广告进行身份验证\登录时,这一功能完美无瑕,也就是说,当我通过B2C广告验证的帐户登录时,会发送邀请电子邮件 现在我有另一个应用程序服务指向B2B Azure广告,用于用户登录\身份验证,因此当我通过B2B广告验证的帐户登录时,会发送邀请电子邮件 带有指向B2C广告的邀请链接的电子邮件已正确发送。但是,单击链接后,B2C注册邀请策略将采取行动,我将看到一个401错误(未经授权)。看起来B2C策略由于任何原因都无法访问策略配置

我实现了这里描述的内容:

当Azure应用程序服务使用B2C Azure广告进行身份验证\登录时,这一功能完美无瑕,也就是说,当我通过B2C广告验证的帐户登录时,会发送邀请电子邮件

现在我有另一个应用程序服务指向B2B Azure广告,用于用户登录\身份验证,因此当我通过B2B广告验证的帐户登录时,会发送邀请电子邮件

带有指向B2C广告的邀请链接的电子邮件已正确发送。但是,单击链接后,B2C注册邀请策略将采取行动,我将看到一个401错误(未经授权)。看起来B2C策略由于任何原因都无法访问策略配置中设置的元数据终结点

正在显示的消息是:

相关ID:78292d04-7184-42d0-ac2d-a60bb98a532f
时间戳:2019-09-20 16:19:25Z AADB2C:元数据端点
''
返回了以下状态代码:“401”

这是自定义注册邀请策略
,其中指定了此元数据端点:


ID令牌提示请求提供程序
ID令牌提示技术配置文件
https://mywebsite.azurewebsites.net/.well-known/openid-configuration
我的问题是:为什么要抛出这个401(未经授权的)?当我尝试访问元数据端点时:
https://mywebsite.azurewebsites.net/.well-known/openid-configuration
它可以正常打开并返回所需的
json
输出:

{
发行人:“https://mywebsite.azurewebsites.net/",
jwks_uri:“https://mywebsite.azurewebsites.net/.well-known/keys",
id\u令牌\u签名\u alg\u值\u支持:[
“RS256”
]
}
这是输出上述
json
的web API方法:

[AllowAnonymous]
[路由(“.well-known/openid配置”,Name=“OIDCMetadata”)]
[HttpGet]
公共HttpResponseMessage元数据()
{
var json=JsonConvert.SerializeObject(新的OidcModel
{
//颁发者名称是应用程序根路径
Issuer=InvitationHelper.GetBaseUrl(),
//包括JWKs端点的绝对URL
JwksUri=Url.Link(“JWKS”,null),
//示例:包括支持的签名算法
IdTokenSigningAlgValuesSupported=new[]{SigningCredentials.Value.Algorithm}
});
var response=Request.CreateResponse(HttpStatusCode.OK);
response.Content=newstringcontent(json,Encoding.UTF8,“application/json”);
返回响应;
}
我甚至尝试将[AllowAnonymous]注释添加到API方法中,但没有做任何更改

为什么自定义注册邀请策略无法访问托管在不同B2B广告租户上的应用程序服务中的元数据终结点

注1:将Application Insights instrumentation添加到此自定义策略中,我看到的唯一一条消息是致命异常401,没有任何其他有价值的信息:

{“种类”:“FatalException”,“Content”:{“Time”:“下午4:15”,“Exception”:
{“种类”:“Handled”,“HResult”:“80131500”,“Message”:“The
元数据端点
''
返回了以下状态代码:
'401',“数据”:
{“IsPolicySpecificError”:false,“uri”:“”}​}}​}

注2:如果查看上面的
,有以下两种设置:


我不知道如何使用这两个设置,因为这些设置在中没有描述

也许问题出在发行人身上……我正在尝试,但到目前为止一切都不起作用。所以我决定问这个问题。我希望有人能给我一些启示。

我通过LinkedIn与他取得了联系。他是GitHub回购协议中最后一个提交人

他问我真正的元数据端点(我在这里发布的是一个虚拟URL)

当他试图访问那个URL时,他被提示登录…什么!?登录!?是的。这回答了问题。我在我的开发人员框中得到了SSO,这就是为什么我没有抓住它…但是等等:我在那个web API方法中有
[AllowAnonymous]
注释,对吗?为什么它仍然要求登录

他立即问我是否在应用程序服务级别启用了身份验证…我去了Azure Portal并检查了应用程序服务
授权/身份验证
设置。猜怎么着…我打开了它,但问题并不是那么直接。请参阅下面突出显示的设置:

我们可以坚持下去,但真正的问题是,前一段时间我已经设定了

请求未通过身份验证时要采取的操作
使用Azure Active Directory登录

这将覆盖放置在web API方法上的
[AllowAnonymous]
注释

一旦我在下拉列表中选择:

允许匿名请求(无操作)

并保存,然后B2C策略开始按预期工作

已在应用服务应用上启用匿名访问。将不允许用户访问 提示登录