🚀

OAuth、OIDCについて出てくる言葉のまとめ

2022/05/12に公開

OAuthとOpenID Connectとの違いについて

大前提としてOAuthもOpenID Connectも作業名などではなく仕様ということ。

OAuthについて

前回の投稿にもあった扱いたいアプリにアカウント連携するためにリソースサーバーからの認証情報を受け取る
OAuthの場合はアクセストークンやリフレッシュトークンを含むトークン情報を取得して、自サービスに保存する。そしてそれをもとにリソースサーバーへアクセスし認証を行う

OpenID Connectについて

OpenID Connectは、上記の流れの中でIDトークン情報を取得する
ID トークンは、ユーザーを認証した結果や、 ユーザー属性情報を利用したいときに使います。
IDトークンのフォーマットはJWT(JSON Web Token)で渡され、暗号化されていているがデコードされることにより、内容が確認できる。IDトークンの中にユーザー名やメールアドレスなどのユーザー情報が含まれている。

OpenID Connectが使用される時はOAuth2.0も使用されることになる

言葉の整理

認証(Authentication)

誰であるかと確認すること
例えだと、パスワード認証などの本人しかわからない事

認可(Authorization)

認可とか権限を与えること

認可のみかチケットや切符など持っていれば権限は与えられるが、持っている人が誰なのか特定はできません。

基本的には認可と認証はセットで扱われる。
例えは、キャッシュカードを使用しての現金の引き落とし。カードを持っていれば、認可されていて、パスワードを知っていないと認証できない。

state(偽造防止状態トークン)

クロスサイトリクエストフォージェリ(以降、CSRF)トークンと呼ばれる。
ユーザーのセキュリティを保護するために、アプリとクライアントの間の情報を保持する一意のセッショントークンを生成する。
ユーザーが悪意のあるユーザーではなくリクエストを行っていることを確認するため。

状態トークンとして適切な選択の一つは、高品質の乱数ジェネレーターを使用して作成された30文字程度の文字列。

ClientID

プロジェクト作成時にアプリから渡されるもの

responseType

基本認証コードフロー要求でGoogleでは「code」である必要がある。

scope

基本的なリクエストではopenid, emailである必要がある。

redirectURL

今回だとGoogleからの応答を受信するサーバー上のHTTPエンドポイントである必要がある。
この値が許可されたURLと一致しない場合、リクエストはredurect_url_mismatchエラーで失敗する。

code

最初のリクエストから返される認証コード
リソースサーバー(今回だとGoogle)が最初のリクエストにstateと一緒に返す値。アクセストークンやユーザー情報と取得する際に再度リクエストがあるとそのcodeを使用して不正アクセスではないか判断する。

IDトークン

JWT形式で暗号化されたもの。

まとめ

OAuthやOIDCについてあまり深掘りせず概要を軽くまとめました。調べていく内に一つ一つの情報量が多いので、簡潔にしました。
特にIDトークンが暗号化された形式で渡されていてJWTの他にJWS、JWEなどの仕様も存在するので次回はJWTについて調べまとめていきたいと思います。

Discussion