前回はResource Owner Password Credentials Grantでしたが、今回はUbuntu上のApacheにmod_auth_openidcをインストールして、悪名高いImplicit Grantを体験してみます。
https://qiita.com/namikitakeo/items/ea23adbc0b5c941ff0ed
今回のClientは、前回までのコンソールとは違ってWEBブラウザになるため、環境変数を表示するCGIを設置します。
mod_auth_openidc設定をApacheで行い、環境変数を表示するCGIを保護します。
(省略)
OIDCRedirectURI https://ubuntu18.japaneast.cloudapp.azure.com/cgi-bin/redirect_uri
OIDCCryptoPassphrase passphrase
OIDCProviderMetadataURL https://ubuntu18.japaneast.cloudapp.azure.com/auth/realms/master/.well-known/openid-configuration
OIDCScope "openid"
OIDCSSLValidateServer Off
OIDCClientID ubuntu18
OIDCResponseType "id_token token"
<Location /cgi-bin>
AuthType openid-connect
Require valid-user
</Location>
(省略)
つぎに管理ユーザー(admin)でKeycloakのAdministration Consoleにログインしたら、Clientsメニューをクリックして、新規Client(ubuntu18)を登録します。Access Typeはpublicのままで、Implicit Flow EnabledをOFFからONに変更しSaveします。
さっそくWEBブラウザからアクセスして、Implicit Grantでid_token/access_tokenを取得します。
本来OAuth 2.0ではresponse_type=tokenがImplicit Grantなのですが、access_tokenの改竄を防ぐためなのか、OpenID Connect 1.0のid_tokenを追加したImplicit Flowでないと実行できませんでした。
OIDCResponseType "id_token token"
またセキュリティ面を考慮するならば、Hybrid Flowで#フラグメントにaccess_tokenが渡らないようにすべきなんだと思います。
OIDCResponseType "id_token code"
かんたんにaccess_tokenが取得出来たのですが、もうuserinfoは叩かなくてもいいですよね。ところで本命のAuthorization Code Flowもmod_auth_openidcを使えば簡単です。くわしい説明は、Qiitaにすばらしい記事がたくさんあるため割愛いたします。
OIDCResponseType "code"
Keycloakすごい!mod_auth_openidcすごい!という事で、できるオーオースは終わりにしようと思います。もしも分かりにくい部分がありましたらご連絡ください。
#次回
つくるオーオース MVC編
https://qiita.com/namikitakeo/items/0de598b8e43eb5b1ff94