第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 jwt golang 包通過 ECDSA 方法簽署 JWT - Sign in with

如何使用 jwt golang 包通過 ECDSA 方法簽署 JWT - Sign in with

Go
慕村225694 2022-06-21 16:22:38
在與 Apple 集成登錄時,您會在您的 Apple 開發(fā)者帳戶中生成一個密鑰。這是一個名為 like 的文件,AuthKey_3JMD5K6.p8看起來像-----BEGIN PRIVATE KEY-----MasdfjalskdasdflaASDFAadsflkjaADSFAewfljasdfljkasefasdflkjasdfasdfljkasdfASDFASDFoiqretasdoiyjlfsbgREtaREGSDFBREtafsrgAREGfdsgaregRLKJIOEWFNLasdflkawefjoiasdflk-----END PRIVATE KEY-----所以我做了一個var appleKey := MasdfjalskdasdflaASDFAadsflkjaADSFAewfljasdfljkasefasdflkjasdf asdfljkasdfASDFASDFoiqretasdoiyjlfsbgREtaREGSDFBREtafsrgAREGfdsgaregRLKJIOEWFNLasdflkawefjoiasdflk我之前使用 HMAC-SHA 方法簽署了 jwt,這相當簡單,但我不知道如何使用 ECDSA 方法簽署 jwt。我以與 HMAC-SHA 方法相同的方式編寫代碼,但出現(xiàn)錯誤key is of invalid type那么使用 golang 的 jwt 庫如何使用 ECDSA 方法簽署我的 jwt?我的代碼  // generate client secret jwt using apple key  expirationTime := time.Now().Add(5 * time.Minute)  claims := &Claims{    StandardClaims: jwt.StandardClaims {      Audience: "https://appleid.apple.com",      Subject: "com.app.ios",      Issuer: string(appleTeamId),      ExpiresAt: expirationTime.Unix(),      IssuedAt: time.Now().Unix(),    },  }  appleToken := jwt.NewWithClaims(jwt.SigningMethodES256, claims)  appleToken.Header["kid"] = appleKid  signedAppleToken, err := appleToken.SignedString(appleKey)我現(xiàn)在知道這不是你的做法,它比這更復雜一些,但這樣做的方法是什么?我發(fā)現(xiàn)這篇文章告訴您如何手動執(zhí)行此操作:http://p.agnihotry.com/post/validating_sign_in_with_apple_authorization_code/但我已經將 jwt 庫用于 golang 用于令牌的另一部分:https ://godoc.org/github.com/dgrijalva/jwt-go
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

在github.com/dgrijalva/jwt-goSigningMethodECDSA.Sign文檔中,您可以找到:


[...] 對于這種簽名方法,密鑰必須是一個ecdsa.PrivateKey結構


所以,舉個例子:


    p8bytes, err := ioutil.ReadFile("SomeAppleKey.p8")

    if err != nil {

      log.Println(err)

      return

    }


    // Here you need to decode the Apple private key, which is in pem format

    block, _ := pem.Decode(p8bytes)

    // Check if it's a private key

    if block == nil || block.Type != "PRIVATE KEY" {

      log.Println("Failed to decode PEM block containing private key")

      return

    }

    // Get the encoded bytes

    x509Encoded := block.Bytes


    token := jwt.NewWithClaims(

        jwt.SigningMethodES256, // specific instance of `*SigningMethodECDSA`

        jwt.StandardClaims{

            // ...

        },

    )


    // Now you need an instance of *ecdsa.PrivateKey

    parsedKey, err := x509.ParsePKCS8PrivateKey(x509Encoded) // EDIT to x509Encoded from p8bytes

    if err != nil {

        panic(err)

    }


    ecdsaPrivateKey, ok := parsedKey.(*ecdsa.PrivateKey)

    if !ok {

        panic("not ecdsa private key")

    }


    // Finally sign the token with the value of type *ecdsa.PrivateKey

    signed, err := token.SignedString(ecdsaPrivateKey)

    if err != nil {

        panic(err)

    }

    fmt.Println(signed) // the signed JWT

注意:如代碼片段所示,因為來自蘋果的密鑰文件是PEM格式,需要先解碼


警告!

請注意,它github.com/dgrijalva/jwt-go已長期無人維護,并且有嚴重的未修復錯誤。并且在版本 4 之前不支持 Go 模塊(無論如何這只是一個預覽版)。我強烈建議選擇一個不同的庫來處理 JWT。


2021 年 6 月更新

現(xiàn)在有一個圖書館的官方社區(qū)分支:由原始項目的所有者祝福。golang-jwt/jwt


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關注
  • 243 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號