【问题标题】:Request Access Token in Postman for Azure AD B2C在 Postman 中为 Azure AD B2C 请求访问令牌
【发布时间】:2018-04-26 18:28:31
【问题描述】:

我如何在Postman 中针对Azure AD B2C 租户请求Access Token


我尝试从 Azure 门户中的 Run Now 获取 URL 并将其放入 Auth Url 中,但这会产生以下错误:


更新

按照克里斯的回答,我现在已经克服了上述错误。我可以登录,但仍然无法获得访问令牌:

AADB2C90085:服务遇到内部错误。请重新验证并重试。 相关 ID:45c56d47-4739-465f-8e02-49ba5b3a1b86 时间戳:2017-11-16 15:27:52Z

【问题讨论】:

  • "AADB2C90085: 服务遇到内部错误。请重新验证并重试。" 如果客户端密码已过期,Azure AD B2C 会返回此错误消息。可能还有很多其他原因,但检查是一回事。

标签: postman azure-ad-b2c


【解决方案1】:

进行此设置有点令人头疼。这是我从这个线程中的答案拼接在一起的内容,更新以利用 Postman 的 Grant Type: Authorization Code (With PKCE)

起点也归功于https://blogs.aaddevsup.xyz/2020/08/performing-azure-ad-oauth2-authorization-code-grant-flow-with-pkce-in-postman/

使用:Azure B2C 租户、JS SPA 前端、Azure Function 后端。

Azure 门户 (Azure AD B2C)

  • SPA 和后端的设置或多或少如本 MS 文档中所述(小心,某些部分已过时!):https://docs.microsoft.com/en-us/azure/api-management/howto-protect-backend-frontend-azure-ad-b2c

  • @ SPA 应用程序注册 > 身份验证刀片 > 将此值添加到“单页应用程序重定向 URI” https://oauth.pstmn.io/v1/callback

  • @Azure AD B2C |应用注册,点击“端点”(蓝色地球图标@顶部)

  • 记录 Azure AD B2C OAuth 2.0 令牌端点 (v2) Azure AD B2c 2.0 授权端点 (v2)

邮递员

  • 授权:Oauth 2.0
  • 将身份验证数据添加到:请求标头

配置新令牌

  • 代币名称:WhateverYouWant

  • 授权类型:使用 PKCE 的验证码

  • 回调网址:https://oauth.pstmn.io/v1/callback

  • [ ] 使用浏览器授权(未选中)

  • 身份验证 URL:https://.b2clogin.com/.onmicrosoft.com//oauth2/v2.0/authorize

  • 访问令牌 URL:https://.b2clogin.com/.onmicrosoft.com//oauth2/v2.0/token

  • 客户端 ID:

  • 客户端密码:

  • 代码挑战方法:SHA-256

  • 代码验证器:

  • 状态:

  • 范围:类似于 .onmicrosoft.com/Hello

  • 客户端身份验证:在正文中发送客户端凭据

  • 点击[清除cookies]和[获取新访问令牌]

【讨论】:

  • 这对我不起作用 - 在使用 pkce 的身份验证代码时,我至少需要提供客户端密码
  • @GustavWengel 也许您启用了隐式流?我更喜欢使用 PKCE 的原因之一是它不需要提交客户端密码。我确认上述设置适用于我的配置。如果您想讨论,请随时给我发消息。
【解决方案2】:

2020-05-26 更新

Microsoft 更改了 Azure Active Directory B2C 的登录 URL,如您所见 here

所以@spottedmahn answer 必须更新为:

授权类型:Implicit

回调 URL:我的 B2C 应用中定义的任何 URL

授权网址:https://{tenant}.b2clogin.com/te/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize

客户端 ID:来自我的 B2C 应用程序的应用程序 ID

范围:https://{tenant}.onmicrosoft.com/{web api app id uri}/{scope name}

客户端认证:任意一个都无所谓

【讨论】:

  • 您好 NDalvise ? - 请随时更新我的​​答案,因此我们只有一个答案供 SO 用户快速找到解决方案
【解决方案3】:

使用@Chris Padgett's answer,我能够使用Implicit 授予类型使其工作(无法使用授权代码格兰类型使其工作)。


授权类型:Implicit

回调 URL:我的 B2C 应用中定义的任何 URL

授权网址:https://login.microsoftonline.com/te/{tenant}/{policy}/oauth2/v2.0/authorize

客户 ID:Application ID 来自我的 B2C 应用

范围:https://{tenant}.onmicrosoft.com/{web api app id uri}/{scope name}

客户端认证:Either one, it didn't matter

【讨论】:

  • 嘿,我只是想说谢谢你用这些 B2C 的东西记录了所有的困难 - 在我寻找答案的任何地方我看到 spotmahn 已经提出了这个问题,完成了研究并得到了答案,通常成功!它非常有用,比试图找出微软(通常)关于该主题的过时文档要好得多。荣誉。
  • 嘿@pcdev - 不客气!这需要一个社区,对吧!顺便说一句,我试着在 Twitter 上寻找你,因为它不会让 SO cmets 膨胀。你的评论让我很开心!谢谢!!
  • 有没有人在你试图用 Postman 测试的 API 由 Azure 函数提供服务器的情况下工作?我有适用于 aspnet MVC 应用程序的 spotmahn/microsoft 方法,但它不适用于使用相同 azure b2c 租户的 Azure Function App。我将为此发布一个单独的问题....
  • 嗨@ubiienewbie - 你发布了以下问题吗?如果是这样,你可以分享链接吗?谢谢
  • @spottedmahn: stackoverflow.com/questions/49304238/… - 干杯!
【解决方案4】:

我可以在 Postman 中获得适用于两种授权类型的 B2C 请求访问令牌:grant_type=implicitgrant_type=authorization_code。我已经打开了一个关于MS documentation的问题:

以下更改是必要的:

grant_type=implicitgrant_type=authorization_code 之间的唯一区别是grant_type=authorization_code 需要更多参数,如下所示:

  • 访问令牌(访问令牌请求) URL:https://login.microsoftonline.com/"tenant-name".onmicrosoft.com/oauth2/v2.0/token?p=B2C_1_"name-of-your-signup-signin-流”

  • client_secret:为您的应用程序生成密钥:Azure 门户 -> Azure AD B2C -> 应用程序 -> -> 密钥 -> 生成密钥

【讨论】:

    【解决方案5】:

    我只是想为繁荣添加一些额外的信息,因为我最近花了很长时间试图解决与错误 AADB2C90085 相关的问题,而这个问题是 Google 上为数不多的结果之一。

    更新

    按照克里斯的回答,我现在已经克服了上述错误。我可以登录,但仍然无法获取访问令牌:

    AADB2C90085:服务遇到内部错误。请重新验证并重试。相关 ID:45c56d47-4739-465f-8e02-49ba5b3a1b86 时间戳:2017-11-16 15:27:52Z

    还有:

    使用@Chris Padgett 的回答,我能够使用隐式授权类型使其工作(无法使用授权代码格兰类型使其工作)

    我在使用授权代码流时收到此错误,因为我的 B2C_1A_TokenSigningKeyContainerB2C_1A_TokenEncryptionKeyContainer 生成错误。一旦我按照Get started with custom policies in Azure Active Directory B2C 的指南进行操作,错误就会停止发生。

    链接中的相关摘录:

    创建签名密钥

    1. 选择策略密钥,然后选择添加。
    2. 对于选项,选择生成。
    3. 在名称中,输入 TokenSigningKeyContainer。前缀 B2C_1A_ 可能会自动添加。
    4. 对于密钥类型,选择 RSA。
    5. 对于密钥用法,请选择签名。
    6. 点击创建。

    创建加密密钥

    1. 选择策略密钥,然后选择添加。
    2. 对于选项,选择生成。
    3. 在名称中,输入 TokenEncryptionKeyContainer。前缀 B2C_1A_ 可能会自动添加。
    4. 对于密钥类型,选择 RSA。
    5. 对于密钥使用,选择加密。
    6. 点击创建。

    【讨论】:

      【解决方案6】:

      对于 Auth URL 字段,您只需输入不带查询字符串参数的授权端点 URL:

      https://login.microsoftonline.com/te/{tenant}/{policy}/oauth2/v2.0/authorize
      

      对于访问令牌 URL 字段:

      https://login.microsoftonline.com/te/{tenant}/{policy}/oauth2/v2.0/token
      

      对于回调 URL 字段,您必须输入在 Azure AD B2C 应用程序中注册的回复 URL,例如:

      https://www.getpostman.com/oauth2/callback
      

      对于 Scope 字段,输入“openid”以及任何 API 访问范围。

      对于客户端身份验证字段,选择“在正文中发送客户端凭据”。

      【讨论】:

      • 我收到The redirect URI '/' provided in the request is not registered for the client id '60a724bd-a41b-4387-806b.....
      • 我已经用回调 URL 的示例更新了上述答案,该回调 URL 也必须向 Azure AD B2C 应用程序注册。
      • 感谢克里斯,但仍然没有运气。我已经尝试了上述回调和jwt.ms,但我得到了一个内部错误。我已经更新了我的问题。
      • 能否请您更换屏幕截图删除任何秘密值?
      • 当然可以。我一直在使用客户的租户。让我试试我个人的,这样我就可以分享一切。
      猜你喜欢
      • 2018-08-24
      • 2020-07-05
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2023-03-23
      • 2020-09-09
      相关资源
      最近更新 更多