Go 言語を使用して Azure アプリケーションを開発する場合、JWT (JSON Web Token) 検証が機能しないという問題がよく発生します。 JWT は、Web アプリケーション間でクレームを渡すための安全なトランスポート方法ですが、Go で Azure の JWT 検証を使用すると、さまざまな問題が発生することがあります。この記事では、JWT 検証が機能しない考えられる理由をいくつか紹介し、この一般的な問題の解決に役立つ対応する解決策を提供します。この記事は、PHP エディターである Apple によって注意深く編集されたものです。お役に立てば幸いです。
go httpサーバーを使用しています。 Azure JWT トークンを使用してルートを保護したいと考えています。トークンを生成できますが、検証できません。
これが私がやったことです:
リーリーverify2(..)
は 2d77b2345c34a631c3d251f57ce68620 がどのキーとも一致しませんでした
を返し、そして
verify(..)
で crypto/rsa: 検証エラーが発生します
私の 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 = "<access-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 }
間違った種類の Azure AD アクセス トークンを使用しています。 JWT ヘッダーに nonce を含むコンテンツは、独自の API によって検証されることを目的としたものではなく、Microsoft 独自の API を対象としています。
この問題を解決するには API スコープを公開する必要があります。その後、JWT ヘッダーのノンスなしのアクセス トークンを取得できるようになります。私の ブログ投稿 には、さらに関連する情報がいくつかあります。
以上がGo での Azure JWT 検証が機能しないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。