Liferayの認証方法の一つ「OpenID Connect」とは?実装方法も解説
この記事では、OpenID Connectの解説と、LiferayにOpenID Connectを実装する方法(Googleアカウント/Microsoftアカウント)を紹介します。
コンテンツ
OpenID Connectとは何か?
OpenID Connect (OIDC) は、OAuth 2.0プロトコルをベースにしたオープンな認証および認可プロトコルです。OIDCは、アプリケーションやウェブサイトに対して、セキュアなログインサービスをオープンスタンダードに基づいて提供するために使用されます。
簡単に言うと、「LiferayにGoogleのアカウントやMicrosoftアカウントでログインできるよ!」ということです。
Liferayがサポートする認証方法について
Liferayは様々な認証プロトコル(認証方法)をサポートしており、例えば以下のものがあります。
- 基本認証(Basic Authentication)
- OpenID Connect (OIDC)
- LDAP
- SAML
- KERBEROS
- トークンベース認証
- OAUTH 2.0
なぜOpenID Connect (OIDC)を使用するのか?
いくつもある認証方法の中で、あえてOpenID Connectを使う理由は、シンプルで実装しやすいという理由の他にも、他サービスとの連携が簡単であることや、シングルサインオンを可能にするなど様々なメリットがあります。
OpenID Connect を使用する理由
- シンプルで使いやすい:OIDC(OpenID Connect)は、認証情報を伝達するためにJSON Web Tokens (JWT)を使用し、多くの場合OIDCライブラリは実装が容易です。
- 簡単な連携:Liferayは、Google、Microsoft、Facebookなどの有名なOIDCプロバイダとの連携をサポートしており、他の多くのプロバイダとも統合することが可能です。これにより、既に認証されたプロバイダのアカウントを使用してログインする便利な方法がユーザーに提供されます。
- セキュリティ:OIDCは、認証情報の完全性とセキュリティを保証するために暗号化とデジタル署名を使用します。
- 既存のユーザーアカウントとの統合:既存のLiferayユーザーデータベースにOIDCを統合して、新たにユーザーアカウントを作成することなく統合することができます。
- シングルサインオン(SSO)を可能にする:OIDCはシングルサインオンをサポートし、ユーザーが一度のログインで複数のアプリケーションにアクセスできるようにします。
LiferayでのOpenID Connectの具体的な動作
上の図は、典型的なLiferayコンポーネントとプラグインコンポーネント間の相互作用に焦点を当てています。実際のOpenID Connectの認可コードフローを少し単純化しています。
- OIDCプロバイダの設定と構成:まず、OIDCプロバイダを設定し構成する必要があります。
- LiferayでのOIDCプロバイダの構成:設定したOIDCプロバイダを使用するようにLiferayを構成します。これには、OIDCプロバイダのURL、クライアントID、クライアントシークレットなどの必要な情報の提供と、その他の構成オプションが含まれます。
- ユーザーがLiferayアプリケーションにアクセス:ユーザーがLiferayアプリケーションにアクセスすると、OIDCプロバイダに認証するためにリダイレクトされます。ユーザーはOIDCプロバイダでの自身の認証情報でログインするよう求められます。
- 認証と承認コードの付与:OIDCプロバイダはユーザーを認証し、ログインに成功すると認証コードを付与します。この認証コードはLiferayアプリケーションがOIDCプロバイダから認証情報とアクセス権限を取得するために使用されます。
- 認証情報とアクセス権限の取得:Liferayは認証コードを使用してOIDCプロバイダから認証情報とアクセス権限(IDトークンとアクセストークン)を取得するリクエストを送信します。成功すると、Liferayはこの情報を保存し、アプリケーション内でユーザーを認証しアクセス権を制御するために使用します。
- 安全な認証とアクセス制御:取得した認証情報とアクセス権限は、ユーザーが認証され、Liferayアプリケーションの適切な部分へのアクセス権を持っていることを確実にするために使用されます。
技術的な内容の理解は難しいので、実際にLiferayにOpenID Connectを実装してみましょう!
LiferayでGoogleアカウントを使用したOpenID Connectの実装
まずはGoogleアカウントでログインするケースです。
ここでは、Liferayのオープンソースのコミュニティ版(CE)を使用しています: (liferay-ce-portal-7.4.3.66-ga66)。また、LiferayDXP(有償版)を使用することもできます。
1. プロジェクトの作成
プロジェクトを作成するためにGoogle Cloud(https://console.cloud.google.com/projectcreate)にアクセスします。
Project nameを入力します。Locationを選択します。
2. 必要な情報を入力
APIs & Services > OAuth consent screen をクリックし、必要な情報を全て入力します。
ユーザーがアクセスしようとしているアプリケーションやプロジェクトが、Googleアカウントの情報へのアクセス権を要求していることをユーザーに通知するために必要な情報を入力します。
3. OAuth 2.0 クライアントID を作成
上記のステップを完了した後、Credentials に戻って OAuth 2.0 クライアントID を作成します。
その後、Name と Authorized redirect URIs に必要な情報を入力します。
Authorized redirect URIs の部分では、 http://localhost:8080 を任意のドメイン名に置き換えることができます。
クライアントIDとクライアントシークレットの2つの情報をどこかにメモしたりして保存してください。
4. Liferay側の設定
Liferayに戻って設定を行います。
Control Panel > Instance Settings にアクセスします。
Instance Settings の画面で、SECURITY セクションを探し、SSO を選択します。
このSSOの画面では、以下の情報を入力する必要があります。
Provider Name: 任意の名前を設定できます(ここでは「Google」と入力しました)
Discovery Endpoint: https://accounts.google.com/.well-known/openid-configuration
OpenID Connect Client ID: 先ほど作成した Client ID を使用します。
OpenID Connect Client Secret: 先ほど作成した Client Secret を使用します。
最後に Save をクリックします。
5. OpenID Connectを有効にする
最後のステップはOpenID Connectを有効にします。
以上です!
結果
「OpenId Connect」リンクが表示されるのでクリックします。
「Client to Google」を選択してSign Inをクリックします。
これでGoogleアカウントでログインできるようになりました!😄🎉
Googleアカウントでログインする場合は、LiferayではFirstNameとLastNameが必須で入力する必要があります。
LiferayでMicrosoftアカウントを使用したOpenID Connectの実装
続いて、Microsoftアカウントでログインするための実装方法です。
1. Azureポータルにアクセス
Azureのポータル(https://portal.azure.com/) にアクセスしログインします。
英語ページのキャプチャですが、日本語だと「Microsoft Entra ID の管理」の「ビュー」をクリックします。続いて、左上の「+追加」をクリックし、さらに「アプリケーションの登録」をクリックします。
2. アプリの登録
アプリの登録を行います。
Redirect URLについては、http://localhost:8080 を任意のドメイン名に置き換えてください。
登録完了後、このような画面が表示されます。
2. クライアント認証情報を作成
クライアント認証情報(Client Credentials)を作成します
Client credentials を選択します。
New Client Secret を作成します。
Value の値をメモなどして保存します。
4. 使用する3つの値をメモして保存
Application (client) ID
Directory (tenant) ID
Client Credentials で作成された Value
この3つの値をメモしておきます。
5. Liferay側の設定
Liferayに戻って設定をします。
Control Panel > Instance Settings にアクセスします。
Instance Settings の画面で、SECURITY セクションを探し、SSO を選択します。
このSSOの画面では、以下の情報を入力する必要があります。
Provider Name: 好きな名前を設定できます(ここでは「Microsoft」とします)
Discovery Endpoint: https://login.microsoftonline.com/<Directory (tenant) ID>/v2.0/.well-known/openid-configuration
<Directory (tenant) ID>を上で保存したIDに置き換えます
OpenID Connect Client ID: 上で保存した Application (client) ID を使用します。
OpenID Connect Client Secret: Client Credentials で生成した Value を使用します。
最後に Save をクリックします。
結果
「OpenId Connect」 リンクが表示されるのでクリックします。
「Client to Microsoft」を選択してSign Inをクリックします。
これでMicrosoftアカウントでログインできるようになりました!😆🎉
ユーザーはFirstNameとLastNameを完全に持っている必要があります。これはLiferayで必須のフィールドです。
また、Microsoftアカウントでログインするためには、ユーザーを事前にテナントに追加する必要があります。
以上、「OpenID Connect」の解説とLiferayでの実装方法でした。