首页 > 其他分享 >【Azure 环境】从Azure AD(Entra ID)中获取的Token在访问自定义的接口应用时验证不通过

【Azure 环境】从Azure AD(Entra ID)中获取的Token在访问自定义的接口应用时验证不通过

时间:2024-11-25 20:12:27浏览次数:4  
标签:nonce Entra 自定义 Graph JWT Token Azure Microsoft

问题描述

集成Azure AD(新名称Microsoft Entra ID),拿到对应的accessToken作为登录用的凭证。这个 AccessToken 能够正常返回,并作为Microsoft Graph userinfo API的Authorization,因为应用中会对前端传递过来的 AccessToken进行校验合法性。但目前遇见的问题时这个 Token 签名校验失败。

“'IDX10503: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.X509SecurityKey , KeyId: xxxxxxxxxxxxxxxxxxx”

如下是Token通过JWT.IO解码后的Header部分截图:

 

问题解答

在查看对Access Token进行JWT解码截图,Header中包含了nonce 参数,这意味着这个Token需要特殊处理,使用常规的JWT验证方法(正常处理)会失败。

## 常规验证AAD Token的 方法:

        String stoken = "eyJ0eXAiOiJKV1QiLCJhbGciO......................_-dIQ";
        DecodedJWT jwt = JWT.decode(stoken);        

        JwkProvider provider = null;
        Jwk jwk = null;
        Algorithm algorithm = null;
        try {
            URL keysURL = new URL("https://login.partner.microsoftonline.cn/common/discovery/keys");
            provider = new UrlJwkProvider(keysURL);
            jwk = provider.get(jwt.getKeyId());
            algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
            algorithm.verify(jwt);
            //if the token signature is invalid, the method will throw SignatureVerificationException
            System.out.println("JWT Validation completed.");
        } catch (JwkException e) {
            e.printStackTrace();
        } catch (SignatureVerificationException e) {
            System.out.println(e.getMessage());
        }

在GitHub 平台中,关于nonce的说明有:

The 'nonce' is a mechanism, that allows the receiver to determine the token was forwarded. The signature is over the transformed nonce, so if you try and validate it directly, the signature will fail. Graph can determine that this token was replayed.
“随机数”是一种机制,允许接收者确定令牌已转发。签名是在转换后的随机数上进行的,因此如果您尝试直接验证它,签名将会失败。 Graph可以确定该令牌被重放。

同时,也有声明 Microsoft Graph 认识到了提高用户安全性的机会。通过将“nonce”放入 jwt 标头中来实现这一目标。JWS 使用随机数的 SHA2 进行签名,“随机数”在 JWS 序列化之前被替换。

所以自己在应用中验证Token并不是一个有效的办法,可以直接把Token转递给Microsoft Graph userinfo API, 让API自行验证Token。

 

 

参考资料

Cannot validate signature : https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609

 

标签:nonce,Entra,自定义,Graph,JWT,Token,Azure,Microsoft
From: https://www.cnblogs.com/lulight/p/18568523

相关文章

  • Day39--自定义异常及小结
    Day39--自定义异常及小结自定义异常使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。在程序中使用自定义异常类,大体可分为以下几个步骤:创建自定义异常类。在方法中通过throw关键字抛......
  • GaussDB数据库SQL系列-自定义函数
    一、前言华为云GaussDB数据库是一款高性能、高安全性的云原生数据库,在GaussDB中,自定义函数是一个不容忽视的重要功能。本文将简单介绍一下自定义函数在GaussDB中的使用场景、使用优缺点、示例及示例解析等,为读者提供指导与帮助。二、自定义函数(Function)概述在SQL中,自定义函数(Fu......
  • AI恶搞闺蜜情侣视频特效魔法AI工具自定义照片抽象生成
    基于AI技术的社交媒体视频特效创作与应用研究——以小红书平台为例摘要本文旨在探讨基于AI技术的社交媒体视频特效创作及其在小红书平台上的应用。随着人工智能技术的不断发展,AI在视频特效领域的应用日益广泛,为社交媒体用户提供了全新的创作方式和丰富的视觉体验。本文以小......
  • vxe-table 实现打印出货单、自定义单据打印
    vxe-table内置非常强大H5打印,只需要传入html代码和css样式,就可以实现任何复杂的打印官网:https://vxeui.com<template><div><vxe-button@click="printEvent">点击打印</vxe-button><divstyle="border:1pxsolid#409eff;padding:16px&qu......
  • 怎么自定义鼠标指针的图案?
    在前端开发中,您可以使用CSS的cursor属性来自定义鼠标指针的图案。以下是一些常用的方法:1.使用预定义的关键词:CSS提供了一些预定义的关键词,可以用来设置一些常见的鼠标指针样式。例如:cursor:pointer;//手型指针,通常用于链接、按钮等可点击元素cursor:default;//......
  • 学习笔记(四十四):自定义组件@LocalBuilder装饰器
    概述:当开发者使用@Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入@LocalBuilder装饰器。@LocalBuilder拥有和局部@Builder相同的功能,且比局部@B......
  • 自定义类型:结构体(一)(含内存对齐细解)
    今天和大家分享自定义类型结构体,话不多说,正文开始:首先在c语言中我们见到过不少类型,比如:int,char,float等等,他们叫做内置类型,但他们所包含的内容是比较单一的,倘若我需要一个类型既能放整形又能放浮点型,那以上的内置类型都满足不了我的需求,因此就有了自定义类型,结构体。1.结构体......
  • KTL 一个支持C++14写公式的K线工具 - 0.9.2版,通达信mdt全景数据复盘大盘,Qt自定义图表
    K,K线,Candle蜡烛图。T,技术分析,工具平台L,公式Language语言使用c++14,Lite小巧简易。项目仓库:https://github.com/bbqz007/KTL    国内仓库:https://gitee.com/bbqz007/KTL 当前0.9.2新添加功能基于QCharts跟通达信mdt数据文件。使用者能够使用QCharts自定义数据处理图表。......
  • Java同步机制深度解析: synchronized vs ReentrantLock
    目录1.引言2.synchronized关键字2.1基本用法2.2实现原理2.2.1Java对象头2.2.2Monitor对象2.3锁升级过程2.4锁消除和锁粗化2.5自旋锁与自适应自旋锁2.6synchronized的特性3.ReentrantLock3.1基本用法3.2实现原理3.2.1AQS的核心思想3.2.2ReentrantLock的......
  • 本博客园自定义样式
    找文章,发现 https://www.cnblogs.com/zhaoqingqing 的博客样式很好,在底部发现是基于ThemeSilencev2.0.2,现在坐着已经更新到v3.0.0-rc2, 作者GitHub:https://github.com/esofar/cnblogs-theme-silence ,自己做了一些小修改。基本可以配置出差不多的,可以参考我的配置:<script>......