パスワードレス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ヘッダー)]トグルがオンになっている。

完全な説明については、「リソース所有者のパスワードフローと攻撃防御のよくある不具合を回避する」をお読みください。