问题描述

使用 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.0, 这是什么情况!的更多相关文章

  1. 【Azure Developer】使用 Microsoft Graph API 获取 AAD User 操作示例

    问题描述 查看官方文档" Get a user " , 产生了一个操作示例的想法,在中国区Azure环境中,演示如何获取AAD User信息. 问题解答 使用Microsoft G ...

  2. 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization

    Azure Active Directory (Azure AD) is Microsoft's cloud-based identity and access management service, ...

  3. 【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?

    问题描述 使用微软Azure AD,对授权进行管理.通过所注册应用的OAuth API(https://login.chinacloudapi.cn/{TENANT ID}/oauth2/v2.0/t ...

  4. 【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式

    问题描述 使用Python代码,展示如何从Azure AD 中获取目标资源的 Access Token. 如要了解如何从AAD中获取 client id,client secret,tenant id ...

  5. 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)

    问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...

  6. 【Azure Developer】解决Azure Key Vault管理Storage的示例代码在中国区Azure遇见的各种认证/授权问题 - C# Example Code

    问题描述 使用Azure密钥保管库(Key Vault)来托管存储账号(Storage Account)密钥的示例中,从Github中下载的示例代码在中国区Azure运行时候会遇见各种认证和授权问题, ...

  7. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...

  8. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

  9. 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)

    关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...

  10. 【Azure Developer】使用 adal4j(Azure Active Directory authentication library for Java)如何来获取Token呢

    问题描述 使用中国区的Azure,在获取Token时候,参考了 adal4j的代码,在官方文档中,发现了如下的片段代码: ExecutorService service = Executors.new ...

随机推荐

  1. Kibana+X-pack安装使用

    安装Kibana 下载解压安装包,一定要装与ES相同的版本 下载地址: https://www.elastic.co/downloads/kibana wget https://artifacts.e ...

  2. win10下Word点击链接跳转,提示“由于本机的限制,该操作已取消”

    Word按住Ctrl点击链接进行跳转,提示"由于本机的限制,该操作已取消,请联系管理员" 网上很多,修改注册表 这边要说的是,修改重启word ,还不行的解决方法:点开任务管理器- ...

  3. 自动化兼容性测试工具——WeTest

    这个作业属于哪个课程 2021春软件工程实践|W班(福州大学) 这个作业要求在哪里 软件工程实践总结&个人技术博客 这个作业的目标 分享自动化兼容性测试工具的使用 其他参考文献 ... 目录 ...

  4. Django视图中的请求与响应

    一 请求 一 限制http请求 视图中的request,实际上是django源码中的HTTPRequest的子类WSGIRequest类的实例对象,主要由django对客户端请求的http协议报文进行 ...

  5. 在 Maui 中自绘组件1:绘制

    在 Maui 中自绘组件 系列文章已完结,共六篇,此为第一篇. 在 Maui 中自绘组件1:绘制 在 Maui 中自绘组件2:可绑定属性 在 Maui 中自绘组件3:事件与命令 在 Maui 中自绘组 ...

  6. 一起听、一起看、一起唱掀起Z世代青年社交浪潮

    6月5日,声网Agora 联合人人都是产品经理在成都举办了主题为"社交泛娱乐APP运营增长力和新玩法解析"的沙龙.现场围绕社交泛娱乐新玩法解析以及出海的新机遇.支付痛点.增长.运营 ...

  7. RHCE服务----DNS

    实验要求: 1.建立DNS服务器,负责解析的域为openedu.com 2.要求将MX记录指向mail.openedu.com,且对应A记录为本机IP 3.要求将NS记录指向ns1.openedu.c ...

  8. 基于深度学习的鸟类检测识别系统(含UI界面,Python代码)

    摘要:鸟类识别是深度学习和机器视觉领域的一个热门应用,本文详细介绍基于YOLOv5的鸟类检测识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择各种鸟类图 ...

  9. Redis与Kafka的区别

    第一: Kafka与Redis PUB/SUB之间较大的区别在于Kafka是一个完整的系统,而Redis PUB/SUB只是一个套件(utility)--没有冒犯Redis的意思,毕竟它的主要功能并不 ...

  10. void关键字

    在C++中,void表示为无类型,主要有三个用途: (1)函数的 返回值用void,表示函数没有返回值. void func(int a, int b) { //函数体代码 return; } (2) ...