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

Dav*_*vid 4 azure hello.js asp.net-web-api2 azure-ad-b2c

环境

按照下面的示例,我有一个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
Run Code Online (Sandbox Code Playgroud)

什么不起作用

当尝试通过前端登录并在租户中注册后端时,我得到以下信息:

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.
Run Code Online (Sandbox Code Playgroud)

而且,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
Run Code Online (Sandbox Code Playgroud)

我尝试过的

我曾尝试寻找类似权限错误日志的日志,该日志会告诉您有关该问题的详细信息,但没有找到。

也许还有其他地方需要查找日志?

我还可以做些什么?

身份验证错误消息旨在限制它们提供的信息,因此必须有某种方法来获得关于错误的更大的特异性。我不知道什么

Dav*_*vid 9

首先,这不能回答我的原始问题,因此我不会将其标记为答案。我让别人给出真正的答案,也许相关性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
Run Code Online (Sandbox Code Playgroud)

注意

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

  • 范围的名称确实很重要。**就目前而言**,您只会取回您拥有的合并范围,如果您选择了伪造的合并范围或您没有的合并范围,我将不返回任何访问令牌。当此功能达到GA时,行为可能会更改,从而导致错误(与没有错误并且没有访问令牌相比) (2认同)