ステップ 1. 設定
AuthConfig インターフェースを作成してください。このインターフェースは auth0-variables.ts というファイルに配置します。
WebAuth オブジェクトのインスタンスを作成できます。
- login: auth0.js の
authorizeを呼び出し、 を開始します - handleAuthentication: URL ハッシュ内の認証結果を確認し、auth0.js の
parseHashメソッドで処理します - setSession: ユーザーの 、、およびアクセストークンの有効期限が切れる時刻を設定します
- logout: ブラウザストレージからユーザーのトークンを削除します isAuthenticated: アクセストークンの有効期限が切れているかどうかを確認します
認証結果を処理する
AuthService の handleAuthentication メソッドは、このハッシュを処理します。
ユーザーのリダイレクト後にアプリが最初に読み込まれたときに認証ハッシュフラグメントを処理できるよう、アプリのルートコンポーネントで handleAuthentication を呼び出します。
Callback コンポーネントを追加する
- 複数の (場合によっては不明な) コールバック URL を許可リストに追加する必要がなくなります
- アプリケーションがユーザーのクライアント側セッションを設定している間、読み込み中の表示を出す場所として使えます
CallbackComponent という名前のコンポーネントを作成し、読み込み中の表示を追加します。
assets ディレクトリに何らかのローディングスピナーが用意されていることを前提としています。実際の動作については、ダウンロード可能なサンプルをご覧ください。
認証後、ユーザーは短時間 /callback ルートに遷移し、その間はローディングインジケーターが表示されます。この間にクライアント側のセッションが設定され、完了後に /home ルートへリダイレクトされます。
ステップ 3. ユーザープロファイルを取得する
トークンから情報を抽出する
このセクションでは、アクセストークンと/userinfo エンドポイントを使用してユーザー情報を取得する方法を説明します。あるいは、ID トークンをライブラリを使用してデコードするだけでもかまいません (必ず先に検証してください) 。どちらも同じ結果になります。追加のユーザー情報が必要な場合は、Management APIの使用を検討してください。
AuthServiceクラスを更新します。getProfile関数を追加し、ローカルストレージからユーザーのアクセストークンを取り出して、userInfo関数を呼び出し、ユーザー情報を取得します。
ステップ 4. Scope に基づいて UI 要素を条件付きで表示する
authResult で返される scope が空でない場合、最初に要求したものとは異なるスコープのセットがユーザーに発行されたことを意味します。そのため、ユーザーに付与されたスコープを判断するには authResult.scope を使用する必要があります。
authResult で返される scope が空の場合は、要求したスコープがすべてユーザーに付与されたことを意味します。したがって、ユーザーに付与されたスコープを判断するには、要求したスコープを使用できます。
以下は、その確認を行うために先ほど setSession 関数に書いたコードです。
AuthServiceクラスに追加する必要があります:
approve:timesheets のスコープを持っている場合にのみ、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 の通常の Http クラスと同じように使用します。
ステップ 6. アクセストークン を更新する
checkSession メソッドを呼び出すメソッドを AuthService に追加します。更新に成功したら、既存の setSession メソッドを使って新しいトークンをローカルストレージに保存します。
AuthService クラスに、認証をサイレントに更新するタイミングを設定する scheduleRenewal というメソッドを追加します。以下のサンプルでは、実際にトークンの有効期限が切れる 30 秒前に実行されるように設定されています。また、Observable の購読を解除する unscheduleRenewal というメソッドも追加します。
AppComponent 内で scheduleRenewal を呼び出すことで行えます。これは、ユーザーが明示的にログインした場合でも、サイレント認証が行われた場合でも、認証フローのたびに実行されます。