ステップ 1. Configuration
AuthConfig インターフェースを作成してください。このインターフェースは auth0-variables.ts というファイルに配置します。
WebAuth オブジェクトのインスタンスを作成できます。
- login: auth0.js の
authorizeを呼び出して、 を開始します - handleAuthentication: URL ハッシュ内の認証結果を確認し、auth0.js の
parseHashメソッドで処理します - setSession: ユーザーの 、、およびアクセストークンの有効期限を設定します
- logout: ブラウザストレージからユーザーのトークンを削除します isAuthenticated: アクセストークンの有効期限が切れていないかどうかを確認します
認証結果を処理する
AuthService の handleAuthentication メソッドは、このハッシュを処理します。
ユーザーのリダイレクト後にアプリが最初に読み込まれたときに認証ハッシュフラグメントを処理できるよう、アプリのルートコンポーネントで handleAuthentication を呼び出します。
Callback コンポーネントを追加する
- 複数の callback URL (場合によっては不明な URL を含む) を許可リストに追加する必要がなくなります
- アプリケーションがユーザーのクライアント側セッションを設定している間、ローディングインジケーターを表示する場所として使えます
CallbackComponent という名前のコンポーネントを作成し、ローディングインジケーターを追加します。
assets ディレクトリ内にあることを前提としています。動作例については、ダウンロード可能なサンプルを参照してください。
認証後、ユーザーはいったん短時間 /callback ルートに遷移し、そこでローディングインジケーターが表示されます。この間にクライアント側のセッションが設定され、その後 /home ルートにリダイレクトされます。
ステップ 3. ユーザープロファイルを取得する
トークンから情報を取り出す
このセクションでは、アクセストークンと/userinfo エンドポイントを使用してユーザー情報を取得する方法を説明します。別の方法として、ライブラリを使用してIDトークンをデコードすることもできます (先に必ず検証してください) 。結果は同じです。追加のユーザー情報が必要な場合は、Management APIの使用を検討してください。
AuthServiceクラスを更新します。getProfile関数を追加します。この関数では、ローカルストレージからユーザーのアクセストークンを取り出し、それをuserInfo関数に渡してユーザー情報を取得します。
ステップ 4. スコープに応じて UI 要素を条件付きで表示する
authResult で返された scope が空でない場合は、ユーザーに最初に要求したものとは異なるスコープのセットが発行されたことを意味します。そのため、ユーザーに付与されたスコープの判定には authResult.scope を使用する必要があります。
authResult で返された scope が空の場合は、要求したすべてのスコープがユーザーに付与されたことを意味します。そのため、ユーザーに付与されたスコープの判定には、要求したスコープを使用できます。
以下は、その確認を行うために先ほど作成した setSession 関数のコードです。
AuthService クラスに追加します。
approve:timesheets スコープを持っている場合にのみ、勤務表を承認 リンクを表示したいとします。以下のコードでは、そのリンクを表示するべきかどうかを判定するために、userHasScopes 関数の呼び出しを追加している点に注目してください。
ルートを保護する
ScopeGuardService サービスクラスを追加できます。
approval ルートの定義で、新しい ScopeGuardService が使われている点に注目してください。
ステップ 5. API を呼び出す
Http クラスをラップする AuthHttp クラスによって実現されます。
angular2-jwt をインストールします:
angular2-jwt 用の設定値を含むファクトリー関数を作成し、アプリケーションの @NgModule の providers 配列に追加します。このファクトリー関数には、ローカルストレージから access_token を取得する tokenGetter 関数を含める必要があります。
angular2-jwt を設定すると、AuthHttp クラスを使用して、アプリケーション内のどこからでも API に安全にアクセスできます。そのためには、必要なコンポーネントまたはサービスに AuthHttp を注入し、Angular’s 通常の Http クラスと同じように使用します。
手順 6. アクセストークンを更新する
AuthService に、auth0.js の checkSession メソッドを呼び出すメソッドを追加します。更新に成功したら、既存の setSession メソッドを使用して、新しいトークンをローカルストレージに保存します。
AuthService クラスに、認証をサイレントに更新するタイミングを設定する scheduleRenewal というメソッドを追加します。以下のサンプルでは、実際にトークンの有効期限が切れる 30 秒前に実行されるよう設定しています。また、Observable の購読を解除する unscheduleRenewal というメソッドも追加します。
AppComponent 内で scheduleRenewal を呼び出します。これは、ユーザーが明示的にログインした場合でも、サイレント認証が行われた場合でも、各認証フローのたびに実行されます。