1 回答

TA貢獻1869條經驗 獲得超4個贊
rolesJWT 有效負載中的聲明是一個數組,因此它也可以包含多個值,例如"roles":["test-app", "production-app"]
chkRoles因此 aslice包含這些值。您可以通過索引訪問它們,例如chkRoles[0],但是如果您不知道在哪個位置可以找到您要查找的值,您可以像這樣迭代切片:
chkRoles := claims["roles"].([]interface{})
for _, role:=range chkRoles {
if role == "test-app" {
fmt.Println("Check Roles passed")
break
}
}
通過此代碼,您將了解roles聲明是否包含值“test-app”。
這是一個完整的程序:
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
)
func main() {
tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UiLCJyb2xlcyI6WyJ0ZXN0LWFwcCIsInByb2R1Y3Rpb24tYXBwIl0sImlhdCI6MTUxNjIzOTAyMn0.4VHXYkAXgFkgbQ524ijVClPVJb0GuXRtAVNp3yuGwvA"
token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{})
if err != nil {
fmt.Println(err)
return
}
if claims, ok := token.Claims.(jwt.MapClaims); ok {
chkRoles := claims["roles"].([]interface{})
for _, role := range chkRoles {
if role == "test-app" {
fmt.Println("Check Roles passed")
break
}
}
}
}
可以在 Go Playground 上查看和測試完整的工作示例
- 1 回答
- 0 關注
- 135 瀏覽
添加回答
舉報