goaのjwtやOAuthにおけるScopeってなんなんだろうと思ったので調べてみた
結論
claimに含まれているscope or scopesで判別
前提
Jwtは.
で連結されたbase64encodeの文字列となっています。
3つのパートに分かれており、順番に ヘッダー
、ペイロード
、 署名
となっています。
JSON Web Token(JWT)の紹介とYahoo! JAPANにおけるJWTの活用 - Yahoo! JAPAN Tech Blog
実際にjwtでやってくるリクエストをjwt.ioでデコードすると、分かれて出力されます。 payloadと言われている2番目のパートのことをgoaではclaimと表現しています。
Scope
goaのSecurityではスコープという機能がありますが、そのScopeって何を持って判別しているか分かりませんでした。
セキュリティ · goa :: Design-first API Generation
そこでgoaのソースを読んでみたところ、payloadに含まれる scope
もしくは scopes
というキーを読んで、対応していれば認可されるという感じでした。
実際のソースでいうとここ
例
design部分のコードが以下の場合、
var jwt = JWTSecurity("jwt", func() { Scope("api:read", "Provides read access") }) var _ = Resource("secured", func(){ Security(jwt, func() { // Use JWT to auth requests to this endpoint Scope("api:read") // Enforce presence of "api" scope in JWT claims. }) })
Jwt tokenのpayloadに以下のような scope
の値が入ってれば認可される
{ "sub":"23343442", "name":"taro", "scope":"api:read" }