前提・実現したいこと
Googleでログインを実装したい
クライアントサイドはAngular
サーバーサイドはGo/Echoでやってます。
発生している問題・エラーメッセージ
https://jwt.io/ で発行されたGoogleのログインで発行されたjwtをペーストし
同じくGoogleから発行されているシークレットkeyで検証しましたが、無効なjwtでした。
"status":401,"error":"code=401, message=invalid or expired jwt"
該当のソースコード
Go
1func main() { 2 e := echo.New() 3 e.Use(middleware.Logger()) 4 e.Use(middleware.Recover()) 5 6 api := e.Group("/api") 7 api.Use(middleware.JWT(Auth.GetGoogleKey().Web.Client_secret)) 8 api.GET("/user", handler.Sample) 9 e.Logger.Fatal(e.Start(":8080")) 10}
Go
1type Key struct { 2 Web Client_secret `json:"web"` 3} 4type Client_secret struct { 5 Client_secret string `json:"client_secret"` 6 Client_id string `json:"client_id` 7} 8 9func GetGoogleKey() Key { 10 jsonFromFile, err := ioutil.ReadFile("./key/client_secret.json") 11 if err != nil { 12 log.Fatal(err) 13 } 14 15 var jsonData Key 16 err = json.Unmarshal(jsonFromFile, &jsonData) 17 if err != nil { 18 log.Fatal(err) 19 } 20 21 return jsonData 22} 23
Go
1func Sample(c echo.Context) error { 2 fmt.Println(c.Request().Header) 3 user := c.Get("user").(*jwt.Token) 4 claims := user.Claims.(jwt.MapClaims) 5 fmt.Printf("%+v", claims) 6 return c.String(http.StatusOK, "success") 7} 8
Angular
1async authenticate():Promise<void>{ //トークンの作成 2 if(!this.gapiSetUp){ 3 await this.googleAuthInit() 4 } 5 this 6 return new Promise(async ()=> { 7 //https://developers.google.com/identity/sign-in/web/reference?authuser=1#googleauthsigninoptions 8 await this.googleAuth.signIn().then( 9 user => this.GoogleUser = user, 10 error => this.error = error, 11 ) 12 console.log(this.GoogleUser.getAuthResponse().id_token ); //実際にjwtは送れている 13 this.httpClient.setAuthorization(this.GoogleUser.getAuthResponse().id_token) 14 await this.httpClient.get("/api/user").then((res)=>{ 15 console.log(res); 16 }) 17 }); 18 }
試したこと
Keyを再発行したり色々試行錯誤しました
補足情報(FW/ツールのバージョンなど)
Go 1.14.3
Echo
Echoが使用してるjwtライブラリ
https://godoc.org/github.com/dgrijalva/jwt-go
Angular 11.0.0
Angular CLI: 11.0.2
Node: 14.5.0
OS: darwin x64
Angular:
...
Ivy Workspace:
Package Version
@angular-devkit/architect 0.1100.2
@angular-devkit/core 11.0.2
@angular-devkit/schematics 11.0.2
@schematics/angular 11.0.2
@schematics/update 0.1100.2
あなたの回答
tips
プレビュー