繁体   English   中英

如何调试B2C权限不足的Azure应用程序?

[英]How can I debug an Azure application that has insufficient B2C permissions?

环境

我有一个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很重要? 然而,这个答案确实解决了我的问题。


在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

注意

认为您发布的作用域的名称无关紧要,唯一重要的是至少使用一个作用域。

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

因此,在回答您的问题时:您可以使用浏览器的网络流量记录器来分析,在身份验证期间出现了什么问题。 我希望这个答案中的信息可能有助于其他人在追踪自己的解决方案时遇到同样的错误。

如果你去这个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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM