リリース

ログインフローのトリガーのバージョンでリリースされた機能と破壊的変更は以下の通りです。

v3(GA)

Post-login

破壊的変更(Breaking Change)

  • api.redirect.canRedirect()は廃止としてマークされました。

  • api.redirect.sendUserTo()は、非対話型フローでリダイレクトをスキップしなくなりました。つまり、api.redirect.sendUserTo()への呼び出しでは、リダイレクトを発行する前に、リダイレクトが必要かどうかを確認する必要があります。event.authentication.methodsのような情報を参照すると、リダイレクトが正常に完了し、api.authentication.recordMethod()を通じて記録されたかどうかを確認できます。非対話型フローでリダイレクトのトリガーを試みると、interaction_requiredエラーが正しくトリガーされます。

新機能

  • event.authentication.methodsに、そのセッション内でユーザーによって完了され、onContinuePostLoginハンドラーのapi.authentication.recordMethod()を使用して記録されたカスタムメソッドも含めることができるようになりました。

  • ユーザーのセッションでカスタムメソッドの完了レコードを保存する方法として、api.authentication.recordMethod()が追加されました。これらのAPIを使用すると、特定のシナリオでカスタム要素を厳密に要求できるようになります。(特定の端末の)ユーザーには、対話型ログインが発生したかどうかにかかわらず、カスタム要素の完了が求められます。 カスタム要素の必須化の条件を満たし、ユーザーのセッションに完了のレコードがない場合には、フローが対話型かどうかは要素が必須かどうかに影響しません。 たとえば、必須のカスタム要素を実装する場合は、以下のようにセットアップできます。

    1. onExecutePostLoginで、 カスタムメソッドの識別子URLのあるevent.authentication.methods配列のレコードを検索します。このメソッドが存在し、充分に新しいタイムスタンプがある場合は、ログインを続行できます。そうでない場合は、api.redirect.sendUserTo()を使用して、カスタム要素を実装するURLへのリダイレクトをトリガーします。カスタムデータはapi.redirect.encodeToken()を使用してJWTにエンコードし、署名することができます。

    2. ユーザーが/continueにリダイレクトされる際には、onContinuePostLoginハンドラーが呼び出されます。このハンドラー内で、カスタム要素から返されるすべてのデータを検証し(必要な場合)、api.authentication.recordMethod()を呼び出して完了を知らせます。

v2(GA)

Post-login

破壊的変更(Breaking Change)

副作用の実行

ログイン後トリガーのGA前のバージョンでは、副作用は、Actionからオブジェクトを返すことで実行されました。Actions GAでは、これらの変更をカプセル化し、より良いエディター内ヒントおよびインラインドキュメントを提供するために、apiオブジェクトが用意されています。

ユーザーのuser_metadataの更新

GA前のトリガー:

async function myFunction(event, context) {
  return {
    user: {
      userMetadata: {
        myParam: "foo"
      }
    }
  };
}

Was this helpful?

/

GAトリガー:

async function onExecutePostLogin(event, api) {
  api.user.setUserMetadata('myParam', 'foo');
}

Was this helpful?

/

ユーザーのapp_metadataの更新

GA前のトリガー:

async function myFunction(event, context) {
  return {
    user: {
      appMetadata: {
        myParam: "foo"
      }
    }
  };
}

Was this helpful?

/

GAトリガー:

async function onExecutePostLogin(event, api) {
  api.user.setAppMetadata('myParam', 'foo');
}

Was this helpful?

/

ログインの拒否

GA前のトリガー:

async function myFunction(event, context) {
  throw new Error("Access denied.");
}

Was this helpful?

/

GAトリガー:

async function onExecutePostLogin(event, api) {
  api.access.deny("Access denied.");
}

Was this helpful?

/

カスタムクレームをアクセストークンに追加する

GA前のトリガー:

async function myFunc(event, context) {
  return {
    accessToken: {
      customClaims: {
        'https://example.com/custom/claim': 'Custom claim value',
      }
    }
  };
}

Was this helpful?

/
GAトリガー:

async function myFunc(event, api) {
  api.accessToken.setCustomClaim('https://example.com/custom/claim', 'Custom claim value');
}

Was this helpful?

/

カスタムクレームをIDトークンに追加する

GA前のトリガー:

async function myFunc(event, context) {
  return {
    idToken: {
      customClaims: {
        'https://example.com/custom/claim': 'Custom claim value',
      }
    }
  };
}

Was this helpful?

/

GAトリガー:

async function myFunc(event, api) {
  api.idToken.setCustomClaim('https://example.com/custom/claim', 'Custom claim value');
}

Was this helpful?

/

多要素認証を動的に有効にする

GA前のトリガー:

async function myFunction(event, context) {
  return {
    command: {
      type: "multifactor",
      provider: "any"
    }
  };
}

Was this helpful?

/

GAトリガー:

async function onExecutePostLogin(event, api) {
  api.multifactor.enable("duo");
}

Was this helpful?

/

ユーザーをリダイレクトする

GA前のトリガー:

async function myFunction(event, context) {
  return {
    command: {
      type: "redirect",
      url: "https://my-app.example.com"
    }
  };
}

Was this helpful?

/

GAトリガー:

async function onExecutePostLogin(event, api) {
  api.redirect.sendUserTo("https://my-app.example.com");
}

Was this helpful?

/

パラメーターを安全に送信し、リプレイ攻撃を避けるために、リダイレクトを介したデータの受け渡しは、Actions GAでは大幅に変更されています。詳細については、「アクションを使ったリダイレクト」をお読みください。

スコープを操作する

Actions BetaでIDおよびアクセストークンスコープの直接操作の提供を試みていますが、Actions GAではこの機能をサポートしていません。