リソース所有者のパスワードレス資格情報交換を移行する

リソース所有者のパスワードのサポートが/oauth/tokenに追加されました。/oauth/roエンドポイントの使用は2017年7月8日に廃止されました。/oauth/roエンドポイントは、IDトークンやアクセストークンのためにエンドユーザーがメールまたはSMSで受信するワンタイムパスワード(OTP)のやり取りに使用されていました。Auth0にはこのユースケースの/oauth/roに代わる新しいAPIが実装されているため、その新しいエンドポイントの使用をお勧めします。

影響のある機能

この変更がユーザーに影響するのは、リソース所有者のパスワードレス資格情報交換を使用していて、Auth0ライブラリーやSDKを使わずに/oauth/roを直接呼び出す場合です。

アクション

要求の変更内容

これまで、/oauth/roへの要求には、以下のようなペイロードが含まれていました。

{
      "grant_type": "password",
      "client_id": "123",
      "username": "alice",
      "password": "A3ddj3w", 
      "connection": "my-database-connection",
      "scope": "openid email favorite_color offline_access",
      "device": "my-device-name"
    }

Was this helpful?

/

新しい実装では以下が変更されています。

  • トークン交換を実行するエンドポイントは/oauth/tokenになりました。

  • Auth0独自の付与タイプは、特定の接続(またはレルム)からユーザーを認証するために使用されます。

  • Auth0では、カスタムAPIで定義されたスコープの他に、標準OIDCスコープがサポートされます。

  • 上記のfavorite_colorなど、これらのどのカテゴリーにも該当しないスコープは、有効なスコープではなくなりました。

  • deviceパラメーターは削除されています。

  • audienceパラメーターは任意です。

以下は、/oauth/tokenへの要求のペイロードの例です。

codeblockOld.header.login.configureSnippet
{
      "grant_type" : "http://auth0.com/oauth/grant-type/passwordless/otp",
      "client_id": "{yourClientId}",
      "client_secret": "{yourClientSecret}", // only for web apps, native apps don’t have a client secret
      "username": "{userEmailAddress}", // or "{userPhoneNumber}"
      "otp": "CODE",
      "realm": "email", // or "sms" 
      "audience" : "{yourApiIdentifier}", // in case you need an access token for a specific API
      "scopes": "openid profile email" // whatever scopes you need
    }

Was this helpful?

/

  • ここでは、付与タイプにhttp://auth0.com/oauth/grant-type/passwordless/otpを指定します。

  • client_idusernameパラメーターに変更はありません。

  • client_secretは、機密クライアント(通常のWebアプリなど)には指定する必要があります。

  • ワンタイムパスワードはpasswordパラメーターではなく、otpパラメーターに含めて送信する必要があります。

  • realmは接続を識別するために使用され、以前の呼び出しからのconnectionパラメーターを置き換えます。

  • scopeパラメーターはほとんど同じですが、OIDC以外の値は受け入れません。

  • audienceパラメーターは追加して、トークンの対象であるAPIオーディエンスを示すことができます。

応答での変更

/oauth/roからの応答は、以下のような形式になります。

{
      "access_token": "SlAV32hkKG",
      "token_type": "Bearer",
      "refresh_token": "8xLOxBtZp8",
      "expires_in": 3600,
      "id_token": "eyJ..."
    }

Was this helpful?

/

  • 返されるアクセストークンは、/userinfoエンドポイント(audienceパラメーターで指定のAPIにRS256を署名アルゴリズムが使われている場合)と任意のカスタムAPI(指定されている場合)の呼び出しに使用できます。

  • IDトークンは、パブリッククライアントに要求されると、RS256を使用して強制的に署名されます。

  • リフレッシュトークンは、offline_accessスコープが付与され、APIに[Allow offline access(オンラインでのアクセスを許可する)]が設定されている場合にのみ返されます。

以下は、/oauth/tokenから返されたOIDC準拠の応答の例です。

{
      "access_token": "eyJ...",
      "token_type": "Bearer",
      "refresh_token": "8xLOxBtZp8",
      "expires_in": 3600,
      "id_token": "eyJ..."
    }

Was this helpful?

/

SDK使用でのコード変更

Auth0が提供するAndroidまたはiOS用のネイティブライブラリーをアプリケーションが使用している場合には、ライブラリーのバージョンを必ず以下の最小バージョン以降にしてください。また、ライブラリーを構成する際には、必ず[OIDC Conformant(OIDC準拠)]フラグをtrueに設定してください。

ライブラリー 最小バージョン
Android SDK 1.2
Lock Android 2.17
Swift SDK 1.20.0
Lock iOS 2.14.0

移行を確認する

  1. 廃止されたエンドポイントを使用しているか確認するには、テナントログを確認し、フィルターを[Deprecation Notice(廃止の通知)]に設定して「oauth/ro passwordless:This feature is being deprecated(パスワードレス:この機能は廃止されました)」というログを確認します。この検索は、「type:depnote AND description:*passwordless*」というクエリを使って直接行うこともできます。

  2. コードベースを移行し、アプリがエンドポイントを呼び出していないことを確認したら、[Dashboard]>[Tenant Settings(テナント設定)]>[Advanced(詳細)]に移動します。

  3. [Migrations(移行)]まで下へスクロールして、 [Legacy /oauth/ro Endpoint(レガシー/oauth/roエンドポイント)]をオフにします。このスイッチをオフにすると、廃止されたエンドポイントがテナントで無効となり、使用を防ぐことができます。

このスイッチをオフにしてログインできなくなった場合は、レガシーコードの全インスタンスがアプリケーションからまだ完全に削除されていません。

移行が運用環境で正常に動作している場合には、このスイッチをオフにしたままにできます。これで、廃止された機能は今後使用されることがなくなります。

もっと詳しく