【问题标题】:How can I debug an Azure application that has insufficient B2C permissions?如何调试 B2C 权限不足的 Azure 应用程序?
【发布时间】:2017-12-14 20:38:36
【问题描述】:

环境

我有一个 Azure B2C 租户,用于管理简单的用户名/密码注册和登录,如下所示:https://github.com/Azure-Samples/active-directory-b2c-javascript-hellojs-singlepageapp

租户在前端管理 javascript/html 应用程序的身份验证,然后该前端应用程序与后端的 WebAPI 应用程序进行通信以获取其数据。

后端 WebAPI 取自此处的示例:https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi

这两个应用程序都已向租户注册,并且需要身份验证才能工作。

什么有效

直接从 Azure 门户进行测试时,身份验证效果很好。

授权请求成功:

Request URL:https://login.microsoftonline.com/dhzb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_SiUpIn&client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&nonce=defaultNonce&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&scope=openid&response_type=id_token&prompt=login
Request Method:GET

什么不起作用

当尝试通过在租户中注册的后端通过前端登录时,我得到这个:

Correlation ID: 4ac6f519-0949-42e0-96a7-d84d14454bbb
Timestamp: 2017-07-10 23:07:48Z
AADB2C90205: This application does not have sufficient permissions against this web resource to perform the operation.

而且永远无法到达 API 后端。

授权请求失败:

Request URL:https://login.microsoftonline.com/tfp/dhzb2c.onmicrosoft.com/B2C_1_SiUpIn/oauth2/v2.0/authorize?client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&response_type=token%20id_token&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&state=%7B%22client_id%22%3A%222bb37577-246c-48a7-b047-2ce2a748dfda%22%2C%22network%22%3A%22adB2CSignInSignUp%22%2C%22display%22%3A%22page%22%2C%22callback%22%3A%22_hellojs_cprxketk%22%2C%22state%22%3A%22%22%2C%22redirect_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Fredirect.html%22%2C%22scope%22%3A%22openid%2Chttps%3A%2F%2Fdhzb2c.onmicrosoft.com%2Ftestb2capi%22%2C%22page_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Findex.html%22%7D&scope=openid%20https://dhzb2c.onmicrosoft.com/testb2capi
Request Method:GET

我的尝试

我曾尝试查找日志(例如权限错误日志)来说明问题的具体情况,但没有找到。

问题

也许我需要在其他地方查找日志?

我还能做什么?

身份验证错误消息旨在限制它们提供的信息,因此必须通过某种方式来获得有关错误的更具体的信息。我不知道什么?

【问题讨论】:

  • 您可以在问题中包含一些内容,以便人们更轻松地帮助您:完整的错误消息,包括错误代码和相关 ID。通过门户发出的 https 请求和您的应用程序发出的 https 请求。您的应用程序注册和权限的屏幕截图。
  • 从托管在 git 上的 B2C 示例完全配置的示例应用程序开始也是一个好主意。你试过吗?您也看到该应用程序也出现了同样的故障?
  • 谢谢@Saca。我添加了完整的错误代码、https 请求以及有关我正在关注的 B2C 示例的信息。减去权限的屏幕截图。另外,我已经解决了我的问题!我会尽快发布答案。

标签: azure asp.net-web-api2 hello.js azure-ad-b2c


【解决方案1】:

首先,这回答了我原来的问题,所以我不会将此标记为答案。我会让其他人给出真正的答案,也许相关 ID 很重要?但是,这个答案确实解决了我的问题。


在 Azure B2C 中,权限称为“范围”。

这意味着为了在没有给定权限错误的情况下成功进行身份验证,需要以下内容:

(1) 后端应用必须发布作用域

(2) 前端应用程序必须订阅该范围

(3) 授权请求必须在scope 字段中包含范围。

Request URL:https://login.microsoftonline.com/tfp/dhzb2c.onmicrosoft.com/B2C_1_SiUpIn/oauth2/v2.0/authorize?client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&response_type=token%20id_token&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&state=%7B%22client_id%22%3A%222bb37577-246c-48a7-b047-2ce2a748dfda%22%2C%22network%22%3A%22adB2CSignInSignUp%22%2C%22display%22%3A%22page%22%2C%22callback%22%3A%22_hellojs_bb3gzjb8%22%2C%22state%22%3A%22%22%2C%22redirect_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Fredirect.html%22%2C%22scope%22%3A%22openid%2Chttps%3A%2F%2Fdhzb2c.onmicrosoft.com%2Ftestb2capi%2Fread%22%2C%22page_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2F%22%7D&scope=openid%20https://dhzb2c.onmicrosoft.com/testb2capi/read
Request Method:GET

注意

认为您发布的范围的名称并不重要,唯一重要的是至少使用了一个范围。

【讨论】:

  • 作用域的名称很重要。 现在您只能取回您拥有的范围,如果您选择了伪造的范围或您没有的范围,我将不返回任何访问令牌。随着此功能达到 GA,行为可能会发生变化,从而导致错误(与无错误和无访问令牌相比)
  • @David - 同意答案不能回答问题,但这是一个很棒的答案,它解决了我的问题。我已经创建了范围,但没有将它们添加到 API Access 中。
【解决方案2】:

我们的 API 身份验证存在类似问题。我们添加了一个 B2C 应用程序,发布了范围 (user_impersonation) 并为其自身添加了 API 访问权限。后来,我们决定向我们的 Azure AD 添加一个自定义域并将其作为主域。之后我们添加的所有应用程序在授权后都收到相同的错误(AADB2C90205)。我们能够通过使用浏览器的开发工具(ChromeFirefox)“调试”正在发生的事情,并在加载应用程序列表时观看“网络”选项卡。我们在那里注意到的一个区别是“identifierUris”数组。一个正在运行的应用程序具有默认的https://somestring.onmicrosoft.com/ApiName/ url,而所有其他无法运行的应用程序都使用我们的自定义 Uri。我们的解决方案是,让默认的 .onmicrosoft.com/ uri 再次成为主要的,然后添加我们的自定义域。

所以回答您的问题:您可以使用浏览器的网络流量记录器来分析身份验证过程中出了什么问题。我希望这个答案中的信息可以帮助其他收到相同错误的人在追踪他们自己的解决方案时。

【讨论】:

    【解决方案3】:

    如果你去这个github下载

     https://github.com/Azure-Samples/active-directory-b2c-advanced-policies
    

    您会在其中找到一个名为 JourneyRecorder 的 SAMPLE MVC 应用程序

    如果将其部署到 Azure,则可以将策略设置为开发模式并记录可用于调试的信息,有些人更喜欢应用洞察,但我认为这仍然是最有用的

     DeploymentMode="Development" 
     UserJourneyRecorderEndpoint="https://your-app-name/stream?id=<Any GUID You can think of>" >
    

    然后上传并执行您的策略,然后导航到

      https://your-app-name/trace_102.html?id=<your GUID>
    

    这不是一个很棒的 UI,但如果你正确设置它,它会记录你的端点,你可以用它来调试 B2C 旅程

    【讨论】:

      【解决方案4】:

      @David 的帖子是正确的,但是应用程序现在标记为 (Legacy),建议使用 App registrations

      然而它非常相似。在您的App registration 中单击Expose an API 并添加一个新范围。之后点击API permissionsAdd a permission。选择APIs my organization uses,您的App registration 名称并选择您新创建的范围。如果您需要管理员同意,您需要点击Grant admin conscent for &lt;YOUR ADB2C&gt;。在此之后,一切都对我有用。

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多