直截了当但开放式的问题:是否有人成功地将 SAFE Stack 应用程序连接到 Azure AD B2C,以便来宾用户(在 B2C 租户中)可以通过定义的用户流或自定义策略登录?
可以让我结束我的方法循环的具体问题:知道为什么使用 Microsoft.Identity.Web 处理身份验证的应用程序会遇到这个记录不充分的错误,以及如何解决它?--
“ID 为 <<Ugly_GUID>> 的应用程序无法获取 ID 令牌,因为请求中未提供 openid 范围或应用程序未获得授权。”
迄今为止我失败的努力的详细信息: 通过一些修改,我能够按照 Ryan Palmer 的两部分系列为我的 SAFE Stack(v3,.NET 5)应用程序强制执行 Azure AD 身份验证:
- https://www.compositional-it.com/news-blog/safe-authentication-with-azure-active-directory/
- https://www.compositional-it.com/news-blog/safe-stack-authentication-with-active-directory-part-2/
这会导致我的真实Azure 登录授予我对应用程序的访问权限。但目标是启用用户流(或自定义策略,无论是否有效),以便在我的 Azure AD B2C 租户中获得授权的用户可以进行身份验证和使用该应用程序。使用 appsettings.json 中的以下设置(以及许多尝试的变体),对应用 URL 的调用成功地重定向到登录用户流:
"AzureAD":
{
"Instance": "https://RoundTableExcaliburDev.b2clogin.com/",
"Domain": "RoundTableExcaliburDev.onmicrosoft.com",
"ClientId": "26e6d007-be46-4928-b06e-04acdbfd2913",
"CallbackPath": "/api/login-callback",
"SignedOutCallbackPath": "/api/logout-callback",
"SignUpSignInPolicyId": "B2C_1A_SIGNUP_SIGNIN"
}
“b2clogin” URI(与 Ryan Palmer 的原始版本中的 login.microsoftonline.com 相比)和 SignUpSignInPolicyId 成功调用了所需的用户流,并且我能够登录(和/或注册)保存在我的 Azure 中的虚拟用户广告 B2C 资源。但是当流程重定向到我的应用程序时,我得到上面列出的“openid 范围”错误。
该错误发生在 localhost 和部署到 Azure Web 应用实例的版本上,并且发生在 Firefox、Chrome 和 Edge 中。
其他 Azure AD B2C 详细信息:
- 我已经注册了一个 Web 应用,其返回 URL 为 https://<app_name>.azurewebsites.net/api/login-callback 和 https://localhost:8080/api/login-callback
- “访问令牌”和“ID 令牌”权限已在 B2C 注册应用的身份验证部分授予。
- 注册的应用程序有一个秘密(不是证书),但我没有在任何地方使用过这个值,我还没有看到任何文档表明它会在哪里使用。
- 在没有身份验证的情况下,SAFE Stack 应用程序在 localhost 和 Azure 上按预期工作。