我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go 中的 Azure JWT 验证不起作用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go 中的 Azure JWT 验证不起作用

在使用Go语言开发Azure应用程序时,经常会遇到JWT(JSON Web Token)验证不起作用的问题。JWT是一种用于在网络应用间传递声明的安全传输方式,但有时在Go中使用Azure的JWT验证时会遇到各种问题。本文将为您介绍一些可能导致JWT验证不起作用的原因,并提供相应的解决方案,帮助您解决这个常见的问题。本文经过php小编苹果精心整理,希望对您有所帮助。

问题内容

我有一个 go http 服务器。我想使用 azure jwt 令牌保护我的路由。我能够生成令牌,但无法验证它。

我就是这样做的:

package main

import (
    "context"
    "errors"
    "fmt"

    "github.com/dgrijalva/jwt-go"
    "github.com/lestrrat-go/jwx/jwa"
    "github.com/lestrrat-go/jwx/jwk"
    njwt "github.com/lestrrat-go/jwx/jwt"
)

const token = ""

const jwksurl = `https://login.microsoftonline.com/common/discovery/keys`

func main() {
    set, _ := jwk.fetch(context.todo(), jwksurl)
    // verified that set has required kid 
    verify2(token, set)
    token, err := verify(token, set)
    // token, err := jwt.parse(token, getkey)
    if err != nil {
        panic(err)
    }
    claims := token.claims.(jwt.mapclaims)
    for key, value := range claims {
        fmt.printf("%s\t%v\n", key, value)
    }
}

func verify2(token string, keyset jwk.set) {
    btoken := []byte(token)
    parsedtoken, err := njwt.parse(
        btoken, //token is a []byte
        njwt.withkeyset(keyset),
        njwt.withvalidate(true),
    )
    fmt.printf("%v %v", parsedtoken, err)
}

func verify(tokenstring string, keyset jwk.set) (*jwt.token, error) {
    tkn, err := jwt.parse(tokenstring, func(token *jwt.token) (interface{}, error) {
        if token.method.alg() != jwa.rs256.string() {
            return nil, fmt.errorf("unexpected signing method: %v", token.header["alg"])
        }
        kid, ok := token.header["kid"].(string)
        if !ok {
            return nil, errors.new("kid header not found")
        }
        keys, ok := keyset.lookupkeyid(kid)
        if !ok {
            return nil, fmt.errorf("key %v not found", kid)
        }
        var raw interface{}
        err := keys.raw(&raw)
        return raw, err
    })
    return tkn, err
}

verify2(..) 给出 未能匹配任何键 verify(..) 给出 crypto/rsa: 验证错误

我的 jwt 标头:

{
  "typ": "JWT",
  "nonce": "...",
  "alg": "RS256",
  "x5t": "-KI3Q9nNR7bRofxmeZoXqbHZGew",
  "kid": "-KI3Q9nNR7bRofxmeZoXqbHZGew"
}

解决方法

您使用的 Azure AD 访问令牌类型错误。 JWT 标头中带有随机数的内容并非旨在由您自己的 API 进行验证 - 它们适用于 Microsoft 自己的 API。

您需要公开一个 API 范围来解决此问题,之后您将获得一个访问令牌,而 JWT 标头中没有随机数。我的博客文章有一些进一步的相关信息。

以上就是Go 中的 Azure JWT 验证不起作用的详细内容,更多请关注编程网其它相关文章!

Go 中的 Azure JWT 验证不起作用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go 中的 Azure JWT 验证不起作用

在使用Go语言开发Azure应用程序时,经常会遇到JWT(JSON Web Token)验证不起作用的问题。JWT是一种用于在网络应用间传递声明的安全传输方式,但有时在Go中使用Azure的JWT验证时会遇到各种问题。本文将为您介绍一些可能
Go 中的 Azure JWT 验证不起作用
2024-02-09

Go语言中使用jwt-go库实现JWT Token验证认证

在Go语言中使用jwt-go库实现JWT Token鉴权JWT(JSON Web Token)是一种轻量级的身份验证和授权的方式,可以帮助我们基于 JSON 格式在用户和系统之间传递安全可信的信息。在构造 JWT Token 的过程中,我
Go语言中使用jwt-go库实现JWT Token验证认证
2024-01-22

特定路由的 Gorilla 中间件身份验证不起作用

学习Golang要努力,但是不要急!今天的这篇文章《特定路由的 Gorilla 中间件身份验证不起作用》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!问题内容我正在为 api
特定路由的 Gorilla 中间件身份验证不起作用
2024-04-05

jquery验证引擎funcCall仅在规则时不起作用

jQuery Validation 插件中的 `funcCall` 方法可以用于执行自定义的验证函数。该方法可以在规则中使用,也可以在其他地方使用。如果 `funcCall` 方法在规则中被调用时不起作用,可能是由于以下几种原因:1. 没有
2023-09-17

为什么我的 echo jwt 自定义代码不起作用?

php小编鱼仔经常收到读者的问题,其中一个常见的问题是关于"为什么我的 echo jwt 自定义代码不起作用?"。在使用 JWT(JSON Web Token)时,有时候我们会遇到自定义代码不起作用的情况,这可能是因为一些常见的问题导致的。
为什么我的 echo jwt 自定义代码不起作用?
2024-02-08

我如何解决 go build 和 go install 不起作用的问题

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《我如何解决 go build 和 go install 不起作用的问题》,主要介绍了,希望对大家的知识积累有所帮助,
我如何解决 go build 和 go install 不起作用的问题
2024-04-04

css中hover不起作用的原因

这篇“css中hover不起作用的原因”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“css中hover不起作用的原因”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下
2023-06-06

使用JWT在PHP API接口中进行身份验证的方法

在 Web 开发中,最常见的需求之一就是用户身份验证。为了实现安全的身份验证,Web 开发者可以依赖于许多不同的机制。其中一种很受欢迎的方法是 JSON Web Tokens(JWT),它提供了一种基于令牌的身份验证方法。在本文中,我们将
使用JWT在PHP API接口中进行身份验证的方法
2024-01-22

ssl证书更新不起作用的原因有哪些

SSL证书更新不起作用的原因可能包括以下几点:1、证书无效在更新SSL证书过程中证书无效或者错误。2、客户端设置不正确客户端设置不正确,导致无法使用新的SSL证书。3、服务器设置不正确Web服务器设置不正确,使得新的SSL证书不能正常工作。
2023-03-02

css中top不起作用的解决方法

这篇文章主要介绍css中top不起作用的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css top不起作用是因为“position”属性的值为“static”,那么设置“top”属性就不会产生任何效果,其解
2023-06-14

PHP中ini_set不起作用的解决方法

这篇文章将为大家详细讲解有关PHP中ini_set不起作用的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP ini_set不起作用的解决办法:1、修改htaccess文件;2、在httpd.
2023-06-22

global中php不起作用的解决方法

小编给大家分享一下global中php不起作用的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php global不起作用的解决办法:1、减少多层次的in
2023-06-08

多播在 golang 中的 Linux 上不起作用

php小编新一,今天要和大家讨论的是在golang中多播在Linux上不起作用的问题。多播是一种网络通信方式,可以在一个发送者和多个接收者之间传输数据。然而,在golang中,我们可能会遇到在Linux操作系统上多播不起作用的情况。本文将解
多播在 golang 中的 Linux 上不起作用
2024-02-10

尝试比较 V 类型的两个值与 Go 泛型不起作用

php小编苹果发现,在 Go 语言中,使用泛型时无法直接比较 V 类型的两个值。这意味着无法像比较字符串或整数那样简单地使用 == 或 != 进行比较。这是因为泛型的实现方式不同,无法直接进行值的比较。在这种情况下,我们需要使用自定义的比较
尝试比较 V 类型的两个值与 Go 泛型不起作用
2024-02-09

PHP 函数在处理数据验证中的作用

php 函数在数据验证中发挥着关键作用,可用于输入验证(如 email 验证、类型转换)和数据清理(如去除空白字符、html 标记)。实践中,这些函数可用于验证用户注册表单中的输入,确保电子邮件地址有效、密码长度足够,以及用户名不含特殊字符
PHP 函数在处理数据验证中的作用
2024-04-25

PHP 函数在实现用户身份验证中的作用

php 函数在用户身份验证中的作用:验证电子邮件和密码:filter_var() 用于验证电子邮件格式,password_verify() 匹配密码散列。实施会话管理:session_start() 启动会话,$_session 用于存储用
PHP 函数在实现用户身份验证中的作用
2024-04-24

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录