質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

0回答

794閲覧

GoogleのOAuth2.0で発行されるJWTのKeyが正しく無いと言われる

tetra_

総合スコア2

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2020/12/23 10:26

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問