【问题标题】:Access token not working Azure AD custom policy访问令牌不起作用 Azure AD 自定义策略
【发布时间】:2019-09-26 07:24:53
【问题描述】:

我为 Azure B2C 制定了一个自定义策略,添加了 jwt.ms 作为回复 URL,一切似乎都运行良好。当我登录时,我被重定向到 jwt.ms 显示令牌及其内容。但是,当我尝试将我的 Angular 前端链接到此自定义策略时,它似乎不起作用。需要响应类型 id_token token,但是当我使用此响应类型时,我收到错误“此应用程序没有足够的权限对​​此 Web 资源执行操作。

当我使用响应类型 id_token 时,它似乎工作正常,并且我收到了带有 JWT 令牌的回复。

我认为问题可能出在应用程序下的 Implicit grant 设置中,所以我尝试为所有人启用 Access tokensID tokens应用程序,但这没有帮助。

Implicit grant settings

请求如下所示:

https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/oauth2/v2.0/authorize
?p=b2c_1a_signup_signin&client_id={client_id}
&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2F&response_type=id_token%20token
&scope=openid%20https%3A%2F%2F{tenant}.onmicrosoft.com%2Fapi%2Fuser_impersonation
&nonce={nonce}
&state={state}

所以如果你替换字符,它看起来像这样:

https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/oauth2/v2.0/authorize
?p=b2c_1a_signup_signin&client_id={client_id}
&redirect_uri=http://localhost:4200/&response_type=id_token token
&scope=openid https://{tenant}.onmicrosoft.com/api/user_impersonation
&nonce={nonce}
&state={state}

我希望登录流程同时返回 JWT ID 令牌和访问令牌。

编辑: 我使用标准的 Signupsignin 用户流程创建了一个全新的 B2C 租户,但我仍然遇到同样的问题。所以我得出结论,这不是自定义策略问题,而是 Azure 中的配置或前端应用程序引起的问题。

【问题讨论】:

  • 您是否在 Azure 门户上启用了隐式授权?
  • 我在哪里做,这不是我在描述的所有应用程序上启用的选项吗?
  • 请看一下。让我知道您是否还有其他顾虑。谢谢
  • 嗨蒂姆。在 Azure AD B2C 刀片中,您是否通过 API 访问 选项将前端应用程序的访问权限分配给后端 API?
  • 后端 API 和前端应用是什么意思?

标签: azure azure-ad-b2c


【解决方案1】:

经过大量实验后,我开始了解您的问题。我猜你没有尝试正确的格式。甚至我不知道您参考的是哪个文件。好吧,第一个问题是……

您收到此错误"This application does not have sufficient permissions against this web resource to perform the operation"

原因

您尚未在 azure 门户上的目标应用程序中设置 API access。要实现这一点,您必须在您的应用程序中添加 API access

假设您的 B2C 租户应用程序中有两个 Published scopes,如下所示:

创建 API 访问权限

为了避免上述错误Add API 访问。为此,请转到您的应用程序选择API access,然后您将在顶部看到一个Add 按钮。单击右侧API access 窗口将打开只需单击Ok。请看下面的屏幕截图:

成功后API Access应该如下图所示

注意:希望它能解决您在尝试发送请求时遇到的错误。

B2C id_token 和访问令牌

按照以下步骤操作Id_token

ID 令牌访问过程

https://YourB2CTenant.b2clogin.com/tfp/YourB2CTenant.onmicrosoft.com/YourPolicy/oauth2/v2.0/authorize?

client_id= YourApplicationId

&redirect_uri=您的应用回复

&scope=openid

&response_type=id_token

看看下面Id_token

注意:只需填写以上格式并粘贴到您的浏览器中,中间不要有空格。如果它是正确的,那么登录页面将是 提示。登录后,您将在浏览器上获得 id_token。

B2C 访问令牌

遵循以下格式在POSTMAN:

授权类型:授权码

回调网址:您的回复网址

AuthURL:https://YourTenant.b2clogin.com/YourTenant.onmicrosoft.com/YourFlow/PolicyName/oauth2/v2.0/authorize?

访问令牌网址: https://YourTenant.b2clogin.com/YourTenant.onmicrosoft.com/oauth2/v2.0/token?p=YourFlow/PolicyName

客户端 ID:您的应用程序 ID

客户端密钥 = 应用程序密钥

Scope=您的任何Published scopes

邮递员请求流程

转到邮递员并单击Authorization 选项卡并选择typeOAuth 2.0 请参见下面的屏幕截图:

要获取访问令牌,请点击Get New Access Token 您将在以下窗口提示您使用上述格式填写它。

点击Request Token 按钮后,您将在成功登录后提示登录窗口,您将收到access_token 的响应。如下:

注意:在 B2C 中,不支持在单个请求中同时获取 `Id-Token 和 access_token 的方式。你必须在 单独的请求。更多详情可以参考here

如果您仍有任何问题,请随时在评论中分享。谢谢你,编码愉快!

【讨论】:

  • 我已经尝试解决这个问题大约 8 小时;这终于解决了我获取访问令牌的问题,谢谢!
  • 很高兴听到它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2020-08-20
  • 1970-01-01
相关资源
最近更新 更多