2Auth0.js v9の参考情報
Auth0.jsは、Auth0クライアント側ライブラリーです。ユニバーサルログインと一緒に使用することをお勧めします(ユニバーサルログインは、可能な限り使用してください)。SPAでauth0.jsを使用すると、Auth0での認証・認可が簡単になります。
ライブラリーの完全なAPIドキュメントはこちらです。
そのまま使えるサンプル
auth0.jsライブラリーのサンプルディレクトリは、そのまま使えるアプリで、auth0.jsを手軽に試してみたいときに役立ちます。実行するには、以下の簡単な手順に従います。
nodeがインストールされていない場合は、ここでインストールします。
このプロジェクトのルートディレクトリで
npm install
を実行して、依存関係をダウンロードします。最後に、このプロジェクトのルートから
npm start
を実行し、ノードサーバー(通常はhttp://localhost:3000/example
)で実行中のアプリに移動します。
セットアップと初期化
それでは、プロジェクトにauth0.jsを統合しましょう。ここでは、インストールの方法、auth0.jsの初期化、サインアップ、ログイン、ログアウトなどについて説明します。
埋め込みログイン用にAuth0アプリケーションを構成する
埋め込みログインを実装するときは、ライブラリが隠しiframe内でのオリジン間の呼び出しを使用して認証を行います。これを安全に行うためには、Auth0がアプリケーションをホストしているドメインを知っている必要があります。
[Allowed Web Origins(許可されているWebオリジン)]フィールドにドメインを追加します。このフィールドがDashboardの[Application Settings(アプリケーションの設定)]に表示されます。
インストールオプション
プロジェクトでauth0.jsを使用するには、いくつかのオプションがあります。ニーズに合わせて以下のいずれかを選択します。
npm install auth0-js
yarn add auth0-js
Was this helpful?
auth0-js
モジュールをインストールしたら、それをすべての依存関係と一緒にバンドルするか、以下を使用してインポートする必要があります。
import auth0 from 'auth0-js';
Was this helpful?
別の方法として、CDNを介してスクリプトをインクルードすることもできます。
<script src="https://cdn.auth0.com/js/auth0/9.18/auth0.min.js"></script>
Was this helpful?
初期化
Auth0アプリケーションの新しいインスタンスを次のように初期化します。
<script type="text/javascript">
var webAuth = new auth0.WebAuth({
domain: '{yourDomain}',
clientID: '{yourClientId}'
});
</script>
Was this helpful?
使用可能なパラメーター
webAuth
をインスタンス化する際に、options
オブジェクトで渡さなければならない必須のパラメーターが2つあります。さらにオプションで渡せるパラメーターもあります。
パラメーター | 必須 | 説明 |
---|---|---|
domain |
必須 | (文字列)Auth0のアカウントのドメインです(例:myaccount.auth0.com)。 |
clientID |
必須 | (文字列)Auth0のクライアントIDです。 |
redirectUri |
任意* | (文字列)デフォルトで使用されるredirectUri です。デフォルトでは空文字列(none)です。ここでグローバルなredirectUri の値を設定しない場合には、使用するそれぞれのメソッドでredirectUriの値を設定する必要があります。 |
scope |
任意 | (文字列)アプリケーションが使用するデフォルトのスコープです。スコープを使用すると、要求にある特定のフィールドで特定のクレームを返すことができます。詳細については、[スコープについてのドキュメント](/scopes)をお読みください。 |
audience |
任意 | (文字列)APIへのアクセス要求にデフォルトで使用されるオーディエンスです。 |
responseType |
任意* | (文字列)デフォルトで使用されるresponseType です。code 、token 、id_token の値をスペースで区切った任意のリストです。デフォルトは'token' です。ただし、redirectUri が提供された場合には、'code' がデフォルトになります。グローバルなresponseType の値を設定しない場合には、使用するそれぞれのメソッドでresponseType の値を設定する必要があります。 |
responseMode |
任意 | (文字列)このオプションはデフォルトで省略されます。'form_post' に設定して、トークンやコードを'redirectUri' にPOSTで送信することもできます。対応されている値はquery 、fragment 、form_post です。 |
leeway |
任意 | (整数)IDトークンの有効期限に関連して、クロックスキューを許容するため余裕秒数の値です。 |
_disableDeprecationWarnings |
任意 | (ブール値)廃止警告を無効にします。デフォルトはfalse です。 |
The token was issued in the future
(トークンが未来に発行された)」というエラーが発生することがあります。leeway
パラメーターを使用して、IDトークンの有効期限までに数秒の余裕を持たせ、これを防ぎます。Scope(スコープ)
auth0.js v9でのデフォルトのスコープ
値は、openid profile email
です。
Auth0.jsをローカルで実行する
auth0.jsの初期化時に少なくとも上記のスコープを手動で指定しなかった場合、Webサイトがhttp://localhost
またはhttp://127.0.0.1
から実行されている際にgetSSOData()
メソッドを呼び出すと、ブラウザーコンソールに以下のエラーが表示されます。
Consent required.When using getSSOData, the user has to be authenticated with the following scope: openid profile email
(同意が必要です。getSSODataを使用する場合、ユーザーはopenid profile emailのスコープで認証される必要があります)
このエラーは、アプリケーションを運用環境で実行している場合や、スコープにopenid profile email
を指定した場合には発生しません。詳細については、「ユーザーの同意とサードパーティーアプリケーション」をお読みください。
ログイン
ログインのメソッドは、アプリケーションで必要なauthの種類に従って選ぶことができます。
webAuth.authorize()
authorize()
メソッドは、ユニバーサルログイン経由でユーザーをログインさせる場合や、以下の例に示すようにソーシャル接続経由でログインさせる場合に使用できます。このメソッドは、Authentication APIの/authorize
エンドポイントを呼び出し、options
オブジェクト経由でさまざまなパラメーターを取ることができます。
パラメーター | 必須 | 説明 |
---|---|---|
audience |
任意 | (文字列)APIへのアクセス要求にデフォルトで使用されるオーディエンスです。 |
connection |
任意 | (文字列)アプリケーションに使用可能なすべての接続を提示するのではなく、使用するべき接続を指定します。 |
scope |
任意 | (文字列)認可を要求したいスコープです。スペースで区切る必要があります。ユーザーについてのあらゆる標準OIDCスコープ()を要求することができます。たとえば、profile やemail、[名前空間形式に準拠したカスタムクレーム](/tokens/guides/create-namespaced-custom-claims)、呼び出すAPIが対応しているスコープ( read:contactsなど)を要求することができます。<dfn data-key="refresh-token">リフレッシュトークン</dfn>を取得するには、 offline_access`を含めます。 |
responseType |
任意 | (文字列)code 、token 、id_token の値をスペースで区切った任意のリストです。デフォルトは'token' です。ただし、redirectUri が提供された場合には、'code' がデフォルトになります。 |
clientID |
任意 | (文字列) Auth0のクライアントIDです。 |
redirectUri |
任意 | (文字列)ユーザーが認可された後に、Auth0がブラウザーをリダイレクトするURLです。 |
state |
任意 | (文字列) リダイレクト間で維持される任意の値です。CSRF攻撃の軽減や、認証プロセスが完了した後で必要になるかもしれない任意のコンテキスト情報(リターンURL)に便利です。詳細については、「状態パラメーター」を参照してください。指定されない場合、シングルページアプリケーションに限り、auth0.jsがstateの生成と検証を自動的に行います。 |
prompt |
任意 | (文字列)値にlogin を指定すると、現在のセッションにかかわらず、ログインページの表示を強制します。値にnone を指定すると、セッションが既に存在する場合はログインをバイパスしようとします。(詳細については、「サイレント認証」の説明を参照してください)。 |
ホスト型のログインでは、/authorize()
メソッドを呼び出す必要があります。
webAuth.authorize({
//Any additional options can go here
});
ソーシャルログインの場合、connection
パラメーターを指定する必要があります。
webAuth.authorize({
connection:'twitter'
});
webAuth.popup.authorize()
ポップアップ認証の場合は、popup.authorize
メソッドを使用できます。ホスト型のログインページでは、ポップアップ認証は使用できません。通常、ポップアップ認証は、ページ全体のリダイレクト時に現在のステータスが失われないようにするために、シングルページアプリで使用します。
ポップアップを使ったデフォルト認可(ユーザーにAuth0のユニバーサルログインが表示されます):
webAuth.popup.authorize({
responseType: 'token'
redirectUri: 'https://{yourApp}/popup_response_handler.html'
//Any additional options can go here
}, function(err, authResult) {
//do something
});
Was this helpful?
ポップアップを使用したソーシャルログインの場合は、authorize
を使用します。
webAuth.popup.authorize({
responseType: 'token'
redirectUri: 'https://{yourApp}/popup_response_handler.html',
connection: 'twitter'
}, function(err, authResult) {
//do something
});
Was this helpful?
ポップアップ認証の結果の処理
ポップアップ認証を使用する場合、redirectUri
を指定する必要があります。ここでは、宛先のページがwebAuth.popup.callback
メソッドを使用して認可の結果をコールバックに知らせます。簡単な実装は、以下のようになります:
<!-- popup_response_handler.html -->
<html>
<body>
<script src="https://cdn.auth0.com/js/auth0/9.18/auth0.min.js"></script>
<script type="text/javascript">
var webAuth = new auth0.WebAuth({
domain: 'YOUR_AUTH0_DOMAIN',
clientID: 'YOUR_CLIENT_ID'
});
webAuth.popup.callback();
</script>
</body>
</html>
Was this helpful?
redirectUri
をアプリケーションの[Allowed Callback URLs(許可されているコールバックURL)]リストに追加する必要があります。webAuth.login()
login
メソッドでは、/co/authenticate
を使用して、データベース接続のクロスオリジン認証を行うことができます。
パラメーター | 必須 | 説明 |
---|---|---|
username |
任意 | (文字列)認証用に提示するユーザー名。次のどちらかが必要です:username またはemail |
email |
任意 | (文字列)認証用に提示するメールアドレス。次のどちらかが必要です:username またはemail |
password |
必須 | (文字列)認証用に提示するパスワード。 |
realm |
必須 | (文字列)認証の対象となるデータベース接続の名前。 |
webAuth.login({
realm: 'tests',
username: 'testuser',
password: 'testpass',
});
Was this helpful?
webAuth.crossOriginVerification()
crossOriginVerification()
メソッドは、ブラウザーでサードパーティのクッキーが無効になっている顧客にクロスオリジン認証を提供するために使用できます。この用途の詳細については、クロスオリジン認証のドキュメントをお読みください。
buildAuthorizeUrl(options)
buildAuthorizeUrl
メソッドを使用して/authorize
URLを構築し、新しいトランザクションを初期化することができます。ブラウザーベースの(パッシブ)認証を実装したいときは、このメソッドを使用します。
// Calculate URL to redirect to
var url = webAuth.client.buildAuthorizeUrl({
clientID: '{yourClientId}', // string
responseType: 'token id_token', // code
redirectUri: 'https://{yourApp}/callback',
state: '{yourState}',
nonce: '{yourNonce}'
});
// Redirect to url
// ...
Was this helpful?
state
パラメーターは、Auth0が返す不透明な値です。このメソッドは、CSRF攻撃を防ぐのに有効なため、webAuth.authorize()
を呼び出す代わりに自分でURLにリダイレクトを行う場合には指定する必要があります。詳細については、「Stateパラメーター」を参照してください。
シングルサインオンと埋め込み認証
埋め込みログインのあるアプリがシングルサインオン(SSO)を使用するには、2つの条件を満たす必要があります。
SSOを行おうとするアプリケーションの両方が、ファーストパーティーのアプリケーションでなくてはなりません。サードパーティーのアプリケーションではSSOが動作しません。
カスタムドメインを使用していること、SSOを実装しようとしているアプリケーションとAuth0テナントが同じドメインにあることが必要です。従来、Auth0ドメインの形式は
foo.auth0.com
ですが、カスタムドメインを使用すると、該当するすべてのアプリケーションとAuth0テナントに同じドメインを使用してCSRF攻撃のリスクを回避できます。
埋め込みログインの実装では、SSOをセットアップする代わりに、ユニバーサルログインの使用をお勧めします。ユニバーサル ログインは、SSOを実行するための最も信頼性が高く安定した方法であり、アプリケーションに複数のドメインを使用する必要がある場合や、サードパーティアプリケーションを使用する必要がある場合に実行できる唯一の方法です。
パスワードレスログイン
パスワードレス認証は、ユーザーがメールやテキストメッセージでワンタイムパスワードを受信することにより、ログインできるようにします。それには、パスワードレス処理を開始し、コード(またはリンク内のコード)を生成してユーザーに送信し、検証方法を介してユーザーの資格情報を承認する必要があります。このプロセスは、ログイン画面の形で実行し、ユーザーにメールアドレス(または電話番号)とそこに送信したばかりのコードの入力を求めます。コードではなく、パスワードレスのリンクを送信することもできます。ユーザーは、メールやテキストに含まれているリンクをクリックするだけでエンドポイントに到達し、このデータが同じ検証方法を使って自動的に検証されます(ユーザーが手動でコードを入力しない点のみが異なります)。
パスワードレスを使用するには、auth0.jsをredirectUri
で初期化し、responseType:'token'
をに設定します。
var webAuth = new auth0.WebAuth({
clientID: '{yourClientId}',
domain: '{yourDomain}',
redirectUri: 'http://example.com',
responseType: 'token id_token'
});
Was this helpful?
パスワードレス認証を開始する
auth0.jsを使用したパスワードレス認証の最初のステップはpasswordlessStart
メソッドです。このメソッドにはいくつかのパラメーターがあり、そのoptions
オブジェクト内で渡すことができます。
パラメーター | 必須 | 説明 |
---|---|---|
connection |
必須 | (文字列)コード/リンクをユーザーに送信する方法を指定します。値はemail またはsms で指定する必要があります。 |
send |
必須 | (文字列)値はcode またはlink で指定する必要があります。null の場合、リンクが送信されます。 |
phoneNumber |
任意 | (文字列)SMS経由でコードまたはリンクを送るのに使用するユーザーの電話番号。 |
email |
任意 | (文字列)メール経由でコードまたはリンクを送信するのに使用するユーザーのメール。 |
phoneNumber
とemail
パラメーターのうち、必ず1つを送信する必要があることにご注意ください。
webAuth.passwordlessStart({
connection: 'email',
send: 'code',
email: 'foo@bar.com'
}, function (err,res) {
// handle errors or continue
}
);
Was this helpful?
パスワードレス認証を完了する
コードを送信する場合は、ユーザーにコードの入力を求める必要があります。コードを処理してユーザーを認証するには、passwordlessLogin
メソッドを使用します。このメソッドには、そのoptions
オブジェクト内で送信できるパラメーターがいくつかあります。
パラメーター | 必須 | 説明 |
---|---|---|
connection |
必須 | (文字列)コード/リンクをユーザーに送信する方法を指定します。値はemail またはsms のいずれかで、passwordlessStart に渡される値と同じでなければなりません。 |
verificationCode |
必須 | (文字列)ユーザーに送信されるコード(コードまたはリンク内に埋め込まれる)。 |
phoneNumber |
任意 | (文字列)SMS経由でコードまたはリンクが送られたユーザーの電話番号。 |
email |
任意 | (文字列)メール経由でコードまたはリンクが送られたユーザーのメール。 |
passwordlessStart
と同様に、パスワードレスのトランザクションを確認するためには、オプションのphoneNumber
とemail
パラメーターのうち、必ず1つを送信する必要があります。
passwordlessLogin
を使用するには、最初にWebAuthを初期化する際に、redirectUri
とresponseType
のオプションを指定する必要があります。
webAuth.passwordlessLogin({
connection: 'email',
email: 'foo@bar.com',
verificationCode: '389945'
}, function (err,res) {
// handle errors or continue
}
);
Was this helpful?
authResultを抽出してユーザー情報を取得する
認証が行われたら、parseHash
メソッドを使用して、ユーザーがアプリケーションにリダイレクトされた際にURLのハッシュフラグメントを解析し、Auth0の認証応答の結果を抽出することができます。これは、状況に合わせて、(メインアプリケーションにリダイレクトする)コールバックページで、またはページ内で処理できます。
parseHash
メソッドは、以下のパラメーターを含むoptions
オブジェクトを受け付けます。
パラメーター | 必須 | 説明 |
---|---|---|
state |
任意 | (文字列)アプリケーションにリダイレクトされるときにAuth0が含める最初の要求にアプリケーションが追加する不透明型の値。この値は、CSRF攻撃を防ぐために、auth0.jsで使用されます。 |
nonce |
任意 | (文字列)IDトークンの検証に使用される |
hash |
任意 | (文字列)URLハッシュ(指定されていない場合は、window.location.hash がデフォルトで使用される) |
parseHash
が返すauthResultオブジェクトの内容は、どの認証パラメーターが使われたかによって異なります。次のようなものが含まれます。
アイテム | 説明 |
---|---|
accessToken |
audience によって指定されたAPIのアクセストークン |
expiresIn |
accessToken の有効期限(秒)が含まれる文字列 |
idToken |
ユーザープロファイル情報が含まれるIDトークンJWT |
webAuth.parseHash({ hash: window.location.hash }, function(err, authResult) {
if (err) {
return console.log(err);
}
webAuth.client.userInfo(authResult.accessToken, function(err, user) {
// Now you have the user's information
});
});
Was this helpful?
client.userInfo
メソッドは、返されたaccessToken
を渡して呼び出すことができます。その場合、/userinfo
エンドポイントに要求が送られ、以下の例と同様の形式で、ユーザー情報が入ったuser
オブジェクトが返されます。{
"sub": "auth0|123456789012345678901234",
"nickname": "johnfoo",
"name": "johnfoo@gmail.com",
"picture": "https://gravatar.com/avatar/example.png",
"updated_at": "2018-05-07T14:16:52.013Z",
"email": "johnfoo@gmail.com",
"email_verified": "false"
}
Was this helpful?
この情報を使って、アプリケーションのニーズに合わせ、何らかの処理を行うことができます。1つの例として、Management APIを使ってユーザーの全プロファイル情報を取得する方法をご紹介します。
nonceの使用
デフォルトでは(およびresponseType
にid_token
が含まれている場合)、auth0.js
はwebAuth.authorize
を呼び出す時にランダムなnonce
を生成し、これをローカルストレージに保存し、それをwebAuth.parseHash
で取り出します。このデフォルトの動作はほとんどのケースに適していますが、場合によっては開発者がnonce
を管理しなければならないこともあります。開発者が生成したnonce
を使用する場合、webAuth.authorize
とwebAuth.parseHash
の両方にオプションとしてこれを提供する必要があります。
webAuth.authorize({nonce:'1234', responseType:'token id_token'});
webAuth.parseHash({nonce:'1234'}, callback);
webAuth.authorize
の代わりにwebAuth.checkSession
を呼び出す場合は、checkSession
のオプションとしてカスタムnonce
のみを指定する必要があります。
webAuth.checkSession({
nonce: '1234',
}, function (err, authResult) {
...
});
Was this helpful?
webAuth.checkSession
メソッドは、返されたIDトークンのnonce
クレームがそのオプションと同じであることを自動的に確認します。
エラーコードと説明
Auth0.jsが埋め込みログインに使用される場合、/co/authenticate
エンドポイントが使用されますが、以下のようなエラーが生じる可能性があります。
ステータス | コード | 説明 |
---|---|---|
400 | invalid_request | 無効な要求本文。client_id、credential_type、username、otp、realmのすべてが必要で、これ以外があってはなりません。 |
401 | unauthorized_client | クロスオリジンログインは許可されていません。 |
400 | unsupported_credential_type | 不明な資格情報タイプのパラメーター。 |
400 | invalid_request | 不明な領域の存在しない接続。 |
403 | access_denied | 間違ったメールアドレスまたはパスワード。 |
403 | access_denied | 認証エラー。 |
403 | blocked_user | ブロックされたユーザー。 |
401 | password_leaked | 使用しているパスワードは(このアプリケーションではなく)データ侵害により以前開示されたため、このログイン試行はブロックされました。 |
429 | too_many_attempts | 複数の連続したログイン試行の後にアカウントがブロックされました。ご希望の連絡方法を使用して、ブロック解除の手順を記載した通知を送信しました。 |
429 | too_many_attempts | 疑わしいログイン動作を検知したため、今後の試行はブロックされます。管理者に問い合わせてください。 |
error
またはerror_description
プロパティがなくても、一般エラーの403が起きることもあります。応答のボディは、次のようになります:
Origin https://test.app is not allowed.
(オリジンのhttps://test.appは許可されていません)ログアウト
ユーザーをログアウトさせるには、logout()
メソッドを使用します。このメソッドは、次のようなパラメータを含むoptionsオブジェクトを受け取ります。
clientID
パラメーターが含まれている場合、提供されたreturnTo
URLは、Auth0 Dashboardのアプリケーションの[Allowed Logout URLs(許可されているログアウトURL)]に記載されている必要があります。ただし、clientID
パラメーターが含まれていない場合は、returnTo
のアカウントレベルの[Allowed Logout URLs(許可されているログアウトURL)]に記載されている必要があります。
webAuth.logout({
returnTo: 'some url here',
clientID: 'some client ID here'
});
Was this helpful?
サインアップ
ユーザーのサインアップには、signup
メソッドを使用します。このメソッドは、次のようなパラメータを含むoptionsオブジェクトを受け取ります。
パラメーター | 必須 | 説明 |
---|---|---|
email |
必須 | (文字列)ユーザーのメールアドレス |
password |
必須 | (文字列) ユーザーが希望するパスワード |
username |
必須* | (文字列) ユーザーが希望するユーザー名 *データベース接続を使用し、**[Requires Username(ユーザー名を必要とする)]**が有効な場合は必須 |
connection |
必須 | (文字列)ユーザーアカウントを作成しようとするアプリケーション上のデータベース接続名 |
user_metadata |
任意 | (JSONオブジェクト)ユーザー情報に使用される追加の属性。user_metadataに保存されます |
サインアップはデータベース接続用です。signup
メソッドの例とフォームのサンプルコードをこちらに示します。
<h2>Signup Database Connection</h2>
<input class="signup-email" />
<input type="password" class="signup-password" />
<input type="button" class="signup-db" value="Signup!" />
<script type="text/javascript">
$('.signup-db').click(function (e) {
e.preventDefault();
webAuth.signup({
connection: 'Username-Password-Authentication',
email: $('.signup-email').val(),
password: $('.signup-password').val(),
user_metadata: { plan: 'silver', team_id: 'a111' }
}, function (err) {
if (err) return alert('Something went wrong: ' + err.message);
return alert('success signup without login!')
});
});
</script>
Was this helpful?
checkSessionを使った新しいトークンの取得
checkSession
メソッドを使用すると、すでにドメインに対するAuth0認証が済んでいるユーザーに対して、新しいトークンを取得することができます。このメソッドは、通常であれば、authorize
に送信される有効なOAuth2パラメーターをすべて受け入れます。省略した場合は、Auth0の初期化時に指定されたパラメーターが使用されます。
checkSession
への呼び出しは、webAuth
が初期化された際にオーディエンスとして指定されたAPIの新しいトークンを取得するために使用することができます。
webAuth.checkSession({}, function (err, authResult) {
// err if automatic parseHash fails
...
});
Was this helpful?
authResult
の形式については、「authResultを抽出してユーザー情報を取得する」を参照してください。
また、audience
とscope
を指定することによって、webAuth
の初期化の際に使用されたAPIとは異なるAPIのトークンを取得することもできます。
webAuth.checkSession(
{
audience: `https://mydomain/another-api/˜`,
scope: 'read:messages'
}, function (err, authResult) {
// err if automatic parseHash fails
...
});
Was this helpful?
checkSession()
では、設定したルールがすべてトリガーされるため、使用する前にDashboardでルールを確認してください。
/authorize
への実際のリダイレクトはiframe内で起こるため、アプリケーションの再読み込みやアプリケーションからのリダイレクトは行われません。
ただし、ブラウザーではサードパーティのクッキーが有効になっている必要があります。有効になっていなければ、checkSession()は現在のユーザーのセッションにアクセスできません(ユーザーに何も表示せずに新しいトークンを取得することが不可能になります)。ユーザーがSafariのITPを有効にしている場合にも同様のことが起こります。
Dashboardのアプリケーションの[Settings(設定)]の下にあるAuth0アプリケーションの[Allowed Web Origins(許可されたWebオリジン)]リストに、認可要求の送信元となるURLを追加することを忘れないでください。
checkSession()でのポーリング
シングルログアウトが必要な一部のマルチアプリケーションのシナリオ(あるアプリケーションからログアウトするユーザーが他のアプリケーションからもログアウトする必要があるような場合)では、checkSession()
を使用して定期的にAuth0をポーリングし、セッションが存在するかどうかを確認するようにアプリケーションを設定できます。セッションがない場合は、ユーザーをアプリケーションからログアウトさせることができます。同じポーリング方式を使用して、シングルサインオン(SSO)のシナリオにサイレント認証を実装することができます。
ポーリング間隔として、checkSession()
の呼び出し間隔を15分以上に設定し、レート制限の問題が生じないようにします。
パスワードのリセット要求
パスワードリセット機能を設定しようとする場合は、changePassword
メソッドを使用し、optionsオブジェクトを渡します。このオブジェクトには、connectionパラメーターとemailパラメーターを含めます。
$('.change_password').click(function () {
webAuth.changePassword({
connection: 'db-conn',
email: 'foo@bar.com'
}, function (err, resp) {
if(err){
console.log(err.message);
}else{
console.log(resp);
}
});
});
Was this helpful?
ユーザー管理
Management APIの機能を使うと、異なるプロバイダーからの個別のユーザーアカウントをリンクしたり、リンクを解除したりして、1つのプロファイルにまとめることができます(詳細については「ユーザーアカウントのリンク」を参照してください)。また、ユーザーメタデータを更新することもできます。
まず、Management APIの呼び出しに使用可能なアクセストークンを取得する必要があります。auth0.jsを初期化する際にhttps://{yourDomain}/api/v2/
を指定することで、認証フローの一部としてアクセストークンを取得することができます。
カスタムドメインを使用している場合、Management API呼び出しで使用するために、webAuth
の新しいインスタンスを作成する必要があります。この場合、カスタムドメインではなく、Auth0のドメインを使用する必要があります。これはManagement API呼び出しがAuth0のドメインでのみ動作するためです。
var webAuth = new auth0.WebAuth({
clientID: '{yourClientId}',
domain: '{yourDomain}',
redirectUri: 'http://example.com',
audience: `https://{yourDomain}/api/v2/`,
scope: 'read:current_user',
responseType: 'token id_token'
});
Was this helpful?
また、checkSession()
を使用してこれを行うこともできます。
webAuth.checkSession(
{
audience: `https://{yourDomain}/api/v2/`,
scope: 'read:current_user'
}, function(err, result) {
// use result.accessToken
}
);
Was this helpful?
必要なスコープを指定しなければなりません。以下のスコープを要求することができます。
read:current_user
update:current_user_identities
create:current_user_metadata
update:current_user_metadata
delete:current_user_metadata
create:current_user_device_credentials
delete:current_user_device_credentials
アクセストークンを取得したら、そのアカウントのAuth0ドメインとアクセストークンを渡して新しいauth0.Management
インスタンスを作成することができます。
var auth0Manage = new auth0.Management({
domain: '{yourDomain}',
token: 'ACCESS_TOKEN'
});
Was this helpful?
ユーザープロファイルの取得
ユーザープロファイルデータを取得するには、getUser()
メソッドを使用します。このメソッドには、userId
とコールバックをパラメーターとして渡します。メソッドはユーザープロファイルを返します。ここで必要とされるuserID
は、client.userInfo
メソッドから取得したものと同じであることにご注意ください。
auth0Manage.getUser(userId, cb);
ユーザープロファイルの更新
ユーザーメタデータを更新する際は、まずuserMetadata
オブジェクトを作成し、その後patchUserMetadata
メソッドを呼び出して、作成したuserMetadata
オブジェクトとユーザーIDを渡す必要があります。このオブジェクトの値は、同じキーを持つ既存の値を上書きするか、ユーザーメタデータに値がない場合は新しい値を追加します。ユーザーメタデータの詳細については、メタデータのドキュメントを参照してください。
auth0Manage.patchUserMetadata(userId, userMetadata, cb);
ユーザーのリンク
ユーザーアカウントをリンクすると、ユーザーがどのアカウントからでも認証できるようになり、どのアカウントを使用してログインしても同じプロファイルが引き出されます。Auth0では、デフォルトですべてのアカウントが個別のプロファイルとして扱われるため、ユーザーのアカウントをリンクしたい場合は以下の手順が必要です。
linkUser
メソッドは、2つのパラメーターを受け取ります。1つはプライマリーアカウントのuserId
、もう1つはセカンダリーアカウントのIDトークン(このIDでログイン後に取得したトークン)です。このユーザーIDは、プライマリーユーザーアカウントの一意の識別子です。このメソッドを使用する際は、IDにプロバイダーのプレフィックスを付けて渡す必要があります(例:auth0|1234567890
やfacebook|1234567890
)。詳細については、「ユーザーアカウントのリンク」を参照してください。
auth0Manage.linkUser(userId, secondaryUserToken, cb);
アカウントをリンクすると、セカンダリーアカウントは、ユーザーデータベースの中で別途のアカウントとして存在しなくなり、プライマリーアカウントの一部としてしかアクセスできなくなります。アカウントがリンクされている場合、セカンダリ―アカウントのメタデータはプライマリーアカウントのメタデータと統合されません。また、リンクが解除されると、セカンダリーアカウントが再び独立した際にプライマリーアカウントのメタデータは保持されません。