【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1, 这是什么情况!

情况,OAuth ,v1,Developer · 浏览次数 : 110

小编点评

## 解决方案: 1. **修改 Azure AD 应用清单:** * 在应用程序清单中添加一个属性名为 `accessTokenAcceptedVersion` 的值,其值为 2。 ```json { ... "accessTokenAcceptedVersion": 2 } ``` 2. **验证 Access Token:** * 在请求中添加一个 `client_id` 和 `client_secret` 的参数,其中 `client_id` 是应用程序 ID,`client_secret` 是应用程序凭据。 * 在请求中添加一个 `grant_type` 参数,值为 `client_credentials`。 * 在请求中包含一个 `scope` 参数,值为 `api://`,表示要访问的资源的 URL 范围。 * 使用 `acquireTokenSilently` 方法获取 Access Token。 ```javascript const scopes = 'api://'; const grantType = 'client_credentials'; const clientId = 'your_client_id'; const clientSecret = 'your_client_secret'; const tokenResponse = await microsoftAuthentication.acquireTokenSilently(scopes, grantType, clientId, clientSecret); ``` **注意:** * 这只是一种示例,您可能需要根据您的应用程序的具体设置进行调整。 * 请确保您在使用 `acquireTokenSilently` 方法之前设置了正确的客户端 ID 和凭据。 * 在使用 `Decode` 将 Access Token 解码为 JWT 时,始终使用 v2.0 版本。

正文

问题描述

使用 Azure AD 注册应用 Oauth2 v2.0的终结点(OAuth 2.0 token endpoint (v2): https://login.partner.microsoftonline.cn/<your tenant id>/oauth2/v2.0/token ) 获取Token,解析出来依旧为v1.0,如何解决呢?

请求Method:

POST

请求URL

https://login.partner.microsoftonline.cn/<your tenant id>/oauth2/v2.0/token

请求的Body

tenant:<your tenant id>
client_id:AAD注册应用的Application ID
scope:api://<AAD注册应用的 Expose an API -- Application ID URI>/.default
grant_type:client_credentials
client_secret:<密码>

执行后的结果为:
{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs... ...4ei78w"
}

 Postman执行截图:

但是,对生成的Access_Token内容进行解码(Decode)时,结果发现version 为 1.0 :

JWT 解析地址:https://jwt.ms/

 

问题解答

经过对Azure AD的应用注册的了解,它的程序清单中,存在一个属性值来控制生成的令牌版本(Token Version)。这个属性值就是 accessTokenAcceptedVersion 

它的解释是:https://docs.azure.cn/zh-cn/active-directory/develop/reference-app-manifest#accesstokenacceptedversion-attribute

指定资源的访问令牌版本。 此参数会更改 JWT 的版本和格式。

accesstokenAcceptedVersion 的可能值为 1、2 或为 null。 如果值为 null,则此参数默认为 1,这对应于 v1.0 终结点。

使用的端点 v1.0 或 v2.0 由客户端选择,仅影响 id_tokens 的版本。 资源需要显式配置 accesstokenAcceptedVersion 以指示受支持的访问令牌格式。

根据以上说明,返回到Azure AD的注册应用页面,查看程序清单,检查 accessTokenAcceptedVersion 的值

基于以上发现,确定解决方案为:修改 accessTokenAcceptedVersion 的值为 2 .

 

操作演示动画

第一部分:修改 accessTokenAcceptedVersion 

 

第二部分:验证 Access Token

 

参考资料

Azure Active Directory 应用清单:https://docs.azure.cn/zh-cn/active-directory/develop/reference-app-manifest#accesstokenacceptedversion-attribute

【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误 : https://www.cnblogs.com/lulight/p/14378218.html

【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate() : https://www.cnblogs.com/lulight/p/16365869.html

 

与【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1, 这是什么情况!相似的内容:

【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1, 这是什么情况!

问题描述 使用 Azure AD 注册应用 Oauth2 v2.0的终结点(OAuth 2.0 token endpoint (v2): https://login.partner.microsoftonline.cn//oauth2/v2.0/token ) 获取T

【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found

spring.cloud.azure.keyvault.secret.property-sources[0].profile.cloud-type=AZURE_CHINA

【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

问题描述 对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中抓取

【Azure Developer】use @azure/arm-monitor sdk 遇见 ManagedIdentityCredential authentication failed.(status code 500)

@azure/arm-monitor ManagedIdentityCredential authentication failed.(status code 500) CredentialUnavailableError: ERROR: AADSTS500011: The resource principal name https://management.azure.com was not

【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image

问题描述 使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程记录。 操作步骤 第一步: 准备Function的镜像文件 如在VS Code中,通过Termina

【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG

问题描述 看见一个有趣的页面,可以把输入的文字信息,直接输出SVG图片,还可以实现动图模式。 示例URL: https://readme-typing-svg.demolab.com/?font=Fira+Code&pause=1000&color=F7F7F7&background=233911F

【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID

问题描述 示例调用MSGraph SDK通过User principal name获取到User信息,如Object ID。 参考资料 选择 Microsoft Graph 身份验证提供程序 : https://learn.microsoft.com/zh-cn/graph/sdks/choose-

【Azure Developer】在App Service上放置一个JS页面并引用msal.min.js成功获取AAD用户名示例

问题描述 在App Service上放置一个JS页面并引用msal.min.js,目的是获取AAD用户名并展示。 问题解答 示例代码 Azure Service

【Azure Developer】开发模式下使用AAD账号访问Azure Blob的相关参考

问题描述 开发模式下使用AAD账号访问Azure Blob的流程参考文件 问题解答 第一步:先在AAD中注册一个APP,步骤可参考: 将应用程序注册到 Microsoft 标识平台 :https://docs.azure.cn/zh-cn/active-directory/develop/quick

【Azure Developer】Go语言调用Azure SDK如何登录到中国区Azure环境

问题描述 在 “使用 Azure SDK for Go 进行 Azure 身份验证” 文章中的 Go 示例代码进行登录Azure时,默认指向的是Globa Azure。当只修改AAD AZURE_CLIENT_ID , AZURE_TENANT_ID 和 AZURE_CLIENT_SECRET参数值