こんにちは、富士榮です。
まだまだ実装すべき点はたくさんありますが、そろそろユーザを固定で埋め込むのではなくデータベースに保存されたユーザ情報を元にIDトークンなどを生成していきたいと思います。
ただデータベースと言っても、前回紹介したJSONBin.ioを使います。
その前にこれまでのおさらいです。
- まずは全体像から
- まずOpenID Providerの情報をRelying Partyに提供する
- OpenID Providerを作る)認可エンドポイントを作る
- OpenID Providerを作る)トークンエンドポイントを作る
- OpenID Providerを作る)UserInfoエンドポイントを作る
- OpenID Providerを作る)response_typeを実装する
- OpenID Providerを作る)Hybridフローを実装する
- OpenID Providerを作る)Pairwise識別子を実装する
- OpenID Providerを作る)scopeの定義と返却する属性
- OpenID Providerを作る)定義済み属性の値として何を返却すべきか
- OpenID Providerを作る)トークンエンドポイントにクライアント認証を実装する
- OpenID Providerを作る)認可エンドポイントでクライアントの登録状態を検証する
実装する内容
ユーザ情報を取得する、と言ってもまだユーザ認証画面などを作るところまでは手を出しませんので、これまで固定で埋め込んでいたユーザ情報を止めるところからです。
とりあえずはユーザのログインID(preferred_username)を指定するとJSONBinからユーザ情報を取得してくる仕組みを作り、ハードコード部分を少しだけ減らしていきたいと思います。
今回使うJSONBinのAPIは以下の2つです。
- コレクションに入っているBinの一覧を取得するAPI
- 最初の10個のBinを取得してくるので、本来は必要に応じてページングをしなければなりませんが、今回は10ユーザも作らないのでページングの考慮はしません
- APIの仕様としては「https://api.jsonbin.io/v3/c/{コレクションID]/bins」をGETするだけです
- 結果、Binの一覧がこんな感じで返却されますので、この中でsnippetMeta.nameがpreferred_usernameと一致している要素のrecordの値を持つbinの中にお目当てのユーザの情報が入っている、という仕掛けです。※このsnippetMeta.nameにユーザ名を入れるためにbinを作る際のname指定をしていたわけです
- Read a Bin
- 単体のBinの中身を読み取るAPI
- 仕様としては「https://api.jsonbin.io/v3/b/{BinのID}」をGETするだけです
- 結果、指定したBinの中身がこんな感じで返却されてきます