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

影響のある機能

この変更がユーザーに影響するのは、リソース所有者のパスワードフロー(リソース所有者のパスワード付与またはROPGとも呼ばれる)を使用していて、Auth0ライブラリーやSDKを使わずに/oauth/roを直接呼び出す場合です。LockやAuth0.jsなどのAuth0ライブラリーは、内部で/oauth/roを使用しないように更新されました。lock-ライブラリーでは、その代わりに、Lockでパスワードレスモードが使用できるようになりました。
ユーザーの/oauth/roベースのアクセストークンが期限切れになると、強制的に再認証が行われます(強制ログアウトが必要)。これは、/oauth/roのリフレッシュトークンでは、/oauth/tokenを呼び出して新しいアクセストークンを取得することができないからです。/oauth/roから/oauth/tokenへの移行時に、ログインしているユーザーはすべてログアウトしなければなりません。

アクション

更求での変更

これまで、/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"
    }
新しい実装には、以下のような変更があります。
  • トークン交換を実行するエンドポイントは/oauth/tokenになりました。
  • Auth0独自の付与タイプは、特定の接続(またはレルム)からユーザーを認証するために使用されます。
  • Auth0では、カスタムAPIで定義されたスコープの他に、標準OIDCスコープがサポートされます。
  • 上記のfavorite_colorなど、これらのどのカテゴリーにも該当しないスコープは、有効なスコープではなくなりました。
  • deviceパラメーターは削除されました。
  • audienceパラメーターは任意です。
以下は、/oauth/tokenへの要求のペイロードの例です。
{
      "grant_type": "http://auth0.com/oauth/grant-type/password-realm",
      "client_id": "123",
      "username": "alice",
      "password": "A3ddj3w",
      "realm": "my-database-connection",
      "scope": "openid email offline_access",
      "audience": "https://api.example.com"
    }
  • ここでは、付与タイプは標準のpasswordでなく、password-realmとして指定されています。
  • client_idusernamepasswordパラメーターに変更はありません。
  • パスワードレルムの付与タイプを使用しているため、realmが含まれています。これが、前の呼び出しで取得したconnectionパラメーターで置き換えられます。
  • scopeパラメーターはほとんど同じですが、OIDC以外の値は受け入れません。
  • audienceパラメーターは追加して、トークンの対象であるAPIオーディエンスを示すことができます。

応答での変更

/oauth/roからの応答は、以下のような形式になります。
{
      "access_token": "SlAV32hkKG",
      "token_type": "Bearer",
      "refresh_token": "8xLOxBtZp8",
      "expires_in": 3600,
      "id_token": "eyJ..."
    }
  • 返されるアクセストークンは、/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..."
    }

移行を確認する

  1. コードベースを移行し、アプリがエンドポイントを呼び出していないことを確認したら、[Dashboard]>[Tenant Settings(テナント設定)]>[Advanced(詳細)]に移動します。
  2. [Migrations(移行)] まで下へスクロールして、 [Legacy /oauth/ro Endpoint(レガシー/oauth/roエンドポイント)] をオフにします。このスイッチをオフにすると、廃止されたエンドポイントがテナントで無効となり、使用を防ぐことができます。
このスイッチをオフにしてログインできなくなった場合は、レガシーコードの全インスタンスがアプリケーションからまだ完全に削除されていません。 移行が運用環境で正常に動作している場合には、このスイッチをオフにしたままにできます。これで、廃止された機能は今後使用されることがなくなります。
I