機密アプリケーションからパスワードレスエンドポイントへ移行する

アプリケーションに代わった呼び出しをAuth0が認証できない場合に、機密アプリケーションから/passwordless/startエンドポイントを使用することが廃止されます。

OAuthは、シークレットを保管できるアプリケーションに「機密」という用語を使用します。これらはAuth0で「通常のWebアプリケーション」と呼ばれ、バックエンドアプリからのWebページを処理します。シングルページアプリケーションとネイティブアプリケーションは「公開アプリケーション」とみなされるため、この変更による影響はありません。

Auth0が/passwordless/startに対する呼び出しを認証できるのは、パラメーターにclient_secretが含まれているか、呼び出しがユニバーサルログインのカスタムログインページか行われてstateパラメーターが転送される場合です。

影響のある機能

使用しているアプリケーションのいずれかが現在、Webアプリケーションからパスワードレス認証を始めるために、/passwordless/startエンドポイントを直接呼び出して、client_secretをパラメーターとして送っていない場合は、この廃止がユーザーに影響します。

ユニバーサルログインページを使ってパスワードレス認証を実装し、Auth0ライブラリーの初期化にデフォルトの方法を変更した場合にも、影響を受ける可能性があります。

影響があるかを確認するには、テナントログを調べるか、「Deprecation Notice(廃止通知)」でフィルタリングして「Enforce client authentication for passwordless connections(パスワードレス接続のクライアント認証を強制する)」というログを確認します。この検索は、「type:depnote AND description:*passwordless*」というクエリを使って直接行うこともできます。この特定のクエリはパブリッククラウドのテナントにのみ機能します。プライベートクラウドのログは説明フィールドで検索できないため注意してください。

アクション

アプリケーションを正しく認証することなく、/passwordless/startエンドポイントを呼び出している場合には、以下を行います。

  • 以下の指示に従って、/passwordless/startを正しく呼び出すようにコードを調整する

  • 変更が正しく行われたこと、「Enforce client authentication for passwordless connections(パスワードレス接続のクライアント認証を強制する)」という廃止ログが生成されていないことをテナントログで確認する

  • [Advanced Tenant Settings(高度なテナント設定)][Migrations(移行)]セクションで、[Enforce client authentication for passwordless connections(パスワードレス接続のクライアント認証を強制する)]を有効にします。

影響を受けるユースケースもいくつかありますが、それぞれでの移行パスは比較的単純です。

バックエンドからのAPI呼び出し

バックエンドから/passwordless/startエンドポイントへの呼び出しにはすべて、パラメーターにクライアントシークレットを含める必要があります。

/passwordless/startに直接POST要求を行うには、client_secretをペイロードの一部として含めます。

codeblockOld.header.login.configureSnippet
POST https://{yourDomain}/passwordless/start
    Content-Type: application/json
    {
      "client_id": "{yourClientId}",
      "client_secret": "{yourClientSecret}",
      "connection": "email|sms",
      "email": "{userEmailAddress}", //set for connection=email
      "phone_number": "{userPhoneNumber}", //set for connection=sms
      "send": "link|code",
      "authParams": { 
          "scope": "openid",
          "state": "{yourState}"
        }
      }

Was this helpful?

/

SDKを使用している場合には、パスワードレスフローを開始するメソッドにパラメーターを追加します。これはSDKごとに異なり、すべてのSDKが更新されているわけではありません。更新されていないSDKを使用している場合は、更新されるまで、HTTP呼び出しを直接行っても構いません。

ユニバーサルログインページのページAuth0.jsまたはLock.js

Webアプリケーションのパスワードレス認証にユニバーサルログインページが使用されている場合は、Lock.jsまたはAuth0.js使って/passwordless/startエンドポイントを呼び出しています。

クライアントシークレットはWebページに保管できないため、呼び出しを認証するには、ユニバーサルログインページで受け取ったstateパラメーターを/passwordless/startエンドポイントに転送する必要があります。そのパラメーターは、カスタムログインページのconfig.internalOptionsフィールドに保管されます。

ログインページをカスタマイズするためのデフォルトのテンプレートは、Lock.jsまたはauth0.jsを初期化する際に以下のように使用します。

var lock = new Auth0Lock(
  config.clientID, 
  config.auth0Domain, 
  {
    auth: {
      // .. other fields set
      params: {
       scope: config.internalOptions.scope,
       _csrf: config.internalOptions._csrf,
       state: config.internalOptions.state,
      }
    }
  });

Was this helpful?

/

var params = Object.assign({
    scope: config.internalOptions.scope,
    _csrf: config.internalOptions._csrf,
    state: config.internalOptions.state,
  }, {
    // ...auth params
  });

var webAuth = new auth0.WebAuth(params);

Was this helpful?

/

カスタムページの実装で、そのコードが削除されていないことを確認してください。

Webアプリケーションのクライアントから/passwordless/startを呼び出す

/passwordless/startエンドポイントを呼び出すのに、通常のWebアプリからページにJavaScriptを使用している(そのページのAuth0.jsを使うなど)場合、JavaScriptを使った呼び出しにはクライアントシークレットを指定できません。使用しているアプリケーションがこれに該当する場合は、/passwordless/startの呼び出しがフロントエンドからではなく、Webアプリケーションのバックエンドから行われるように、アプリを変更する必要があります。

レート制限

/passwordless/startにクライアント認証を追加すると、要求で送信されたヘッダーをAuth0が信頼できるようになります。auth0-forwarded-forヘッダーを設定すると、ログにIPアドレスが表示され、攻撃防御のために利用されます。

認証された/passwordless/start要求は、通常の認証済みのAPI要求として扱われ、認証APIのグローバルレート制限が適用されます。