在 Postman 中为 Azure AD B2C 请求访问令牌

Posted

技术标签:

【中文标题】在 Postman 中为 Azure AD B2C 请求访问令牌【英文标题】:Request Access Token in Postman for 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 会返回此错误消息。可能还有很多其他原因,但检查是一回事。 【参考方案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: ***.com/questions/49304238/… - 干杯!【参考方案4】:

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

更新文档并提及grant_type=authorization_code" 也是可能的(参见说明):https://github.com/aspnet/Docs/issues/10336

以下更改是必要的:

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 的指南进行操作,错误就会停止发生。

链接中的相关摘录:

创建签名密钥

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

创建加密密钥

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

【讨论】:

【参考方案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,但我得到了一个内部错误。我已经更新了我的问题。 能否请您更换屏幕截图删除任何秘密值? 当然可以。我一直在使用客户的租户。让我试试我个人的,这样我就可以分享一切。

以上是关于在 Postman 中为 Azure AD B2C 请求访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)

Azure AD 与 Azure AD B2C 与 Azure AD B2B

Azure AD B2C 租户和普通 Azure AD 租户有啥区别?

Azure AD B2C 与企业 (Azure?) AD 帐户集成

无头认证Azure AD b2c

Azure AD B2C 密码重置