パスワードレスAPIを使用する
パスワードレスAPIは次の2つのシナリオで使用できます。
ユニバーサルログインを実装し、Auth0とインタラクションするためにauth0.jsを使用してログインページをカスタマイズする場合。
アプリケーションにログインフローを埋め込む場合。
ログインを埋め込む場合、セキュリティ上の影響を必ず理解してください。
さまざまなシナリオでユニバーサルログインと埋め込みログインにパスワードレスを実装する方法の詳細については、「ユニバーサルログインを使用したパスワードレス認証」または「埋め込みログインを使用したパスワードレス認証」をお読みください。
パスワードレスエンドポイント
POST /passwordless/start
POST /passwordless/startエンドポイントを呼び出すと、クラシックログインと埋め込みログインの両方でパスワードレス認証プロセスを開始できます。
エンドポイントに提供されたパラメーターに応じて、Auth0は次のいずれかを送信してユーザー検証プロセスを開始します。
メールまたはSMSメッセージによる1回限りのコード
メールによる1回限りのリンク
API 呼び出しは次の構造を持つ必要があります。
POST https://{yourDomain}/passwordless/start
Content-Type: application/json
{
"client_id": "{yourClientID}",
"client_secret": "{yourClientSecret}", // For Regular Web Applications
"connection": "email|sms",
"email": "{email}", //set for connection=email
"phone_number": "{phoneNumber}", //set for connection=sms
"send": "link|code", //if left null defaults to link
"authParams": { // any authentication parameters that you would like to add
"scope": "openid", // used when asking for a magic link
"state": "{yourState}" // used when asking for a magic link, or from the custom login page
}
}
Was this helpful?
マジックリンクを使用すると、ユーザーは認証APIによって生成されたリンクを受け取ります。ユーザーはリンクを選択し、{yourAuth0Tenant}.auth0.com/passwordless/verify-redirect
への呼び出しをトリガーします。Auth0 はユーザーをアプリケーションにリダイレクトし、ユーザーはログインします。
コードを使用する場合、アプリケーションはそのコードの入力を求める必要があり、その後、/oauth/token
エンドポイント、またはAuth0.js SDK のpasswordlessLogin
メソッドを使用して、そのコードを認証トークンと交換する必要があります。
POST /oauth/token
ネイティブアプリケーションまたは通常のWebアプリケーションにパスワードレスを実装する場合は、/oauth/token
を使用してOTPコードを認証トークンと交換する必要があります。このエンドポイントはシングルページアプリケーションからは使用できません。
これを実現するには、まず、アプリケーションの設定の[Advanced Settings(詳細設定)] > [Grant Types(付与タイプ)]にある[Auth0 Dashboard(Auth0ダッシュボード)]>[Applications(アプリケーション)]>[Applications(アプリケーション)]で、アプリケーションの[Passwordless OTP(パスワードレスOTP)]付与を有効にする必要があります。
ユーザーはOTPコードを受け取り、ネイティブアプリケーションまたはWebアプリケーションがユーザーにOTPコードの入力を求めます。ユーザーがコードを入力すると、次のパラメーターを使用して/oauth/token
エンドポイントを呼び出すことで認証フローを完了できます。
POST https://{yourAuth0Domain}/oauth/token
Content-Type: application/json
{
"grant_type" : "http://auth0.com/oauth/grant-type/passwordless/otp",
"client_id": "{yourAuth0ClientID}",
"client_secret": "{yourClientSecret}", // only for web apps, native apps don’t have a client secret
"username":"<email address>", // or "<phone number>"
"otp": "CODE",
"realm": "email", // or "sms"
"audience" : "your-api-audience", // in case you need an access token for a specific API
"scope": "openid profile email" // whatever scopes you need
}
Was this helpful?
すべてがうまくいけば、Auth0は次のような応答を返します。
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"eyJz93a...k4laUWw",
"refresh_token":"GEbRxBN...edjnXbL",
"id_token":"eyJ0XAi...4faeEoQ",
"token_type":"Bearer",
"expires_in":86400
}
Was this helpful?
その後、IDトークンをデコードしてユーザーに関する情報を取得したり、アクセストークンを使用して通常どおりAPIを呼び出したりすることができます。
Auth0.jsを使用する
シングルページアプリケーションまたはカスタマイズされたユニバーサルログインページでパスワードレス認証を実装する場合は、Auth0.jsとそれに含まれるpasswordlessLoginメソッドを使用する必要があります。実装は複雑なので、APIを直接呼び出すのではなく、ライブラリーを使用することをお勧めします。
パスワードレスエンドポイントでのレート制限
Auth0のレート制限と攻撃保護機能は、API呼び出しを行っているマシンのIPのみを考慮します。API呼び出しがバックエンドサーバーから行われる場合、通常、Auth0ではサーバーのIPではなく、エンドユーザーのIPを考慮する必要があります。
Auth0はAPI呼び出しでauth0-forwarded-for
ヘッダーを指定することをサポートしていますが、次の場合にのみ考慮されます。
機密アプリケーションに対してAPI呼び出しが行われる。
API 呼び出しにはクライアントシークレットが含まれている。
[Trust Token Endpoint IP Header(信頼トークンエンドポイントIPヘッダー)]トグルがオンになっている。
完全な説明については、「リソース所有者のパスワードフローと攻撃防御のよくある不具合を回避する」をお読みください。