Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Mar 26, 2026

Web UIでサインインを有効にする

前提条件

注意: ソーシャルサインイン(OAuth)機能は iOSmacOSvisionOS でのみ利用可能です。

ソーシャルサインインを設定する場合、属性を「必須」として指定する際は注意が必要です。異なるソーシャルアイデンティティプロバイダーは、Cognitoに返す情報の範囲が異なります。最初に「必須」として設定されたユーザープール属性は後で変更できず、ユーザーの移行または新しいユーザープールの作成が必要になる可能性があります。

完全な例については、プロジェクトセットアップのウォークスルーに従ってください。

macOSプロジェクトでAuthを使用するには、Keychain Sharing機能を有効にする必要があります。Xcodeで、アプリケーションターゲット > 署名と機能 > + 機能に移動し、Keychain Sharing を選択します。

この機能が必要な理由は、AuthがmacOSでプラットフォームのベストプラクティスとしてData Protection Keychainを使用するためです。 macOSでKeychainがどのように機能し、Keychain Sharing権利の詳細については、TN3137: macOS keychain APIs and implementationsを参照してください。

アプリケーションに機能を追加する方法の詳細については、Xcodeの機能を参照してください。

Auth カテゴリを設定

このライブラリのCognitoプラグインは現在、Authorization Code Grant OAuthフローをサポートしています。

以下のように auth/resource.ts ファイルを更新して、web UIでのサインインとサインアウト機能を有効にします。

export const auth = defineAuth({
loginWith: {
email: true,
externalProviders: {
callbackUrls: ["myapp://callback/"],
logoutUrls: ["myapp://signout/"],
},
},
});

Info.plistを更新

Web UIでのサインインには、Amplifyプラグインが、サインイン UIをwebview内に表示する必要があります。サインインプロセスが完了すると、サインイン UIはアプリにリダイレクトされます。 アプリの Info.plist でこれを有効にする必要があります。Info.plistを右クリックして、Open As > Source Codeを選択します。URL スキームに以下のエントリを追加します:

<plist version="1.0">
<dict>
<!-- YOUR OTHER PLIST ENTRIES HERE -->
<!-- ADD AN ENTRY TO CFBundleURLTypes for Cognito Auth -->
<!-- IF YOU DO NOT HAVE CFBundleURLTypes, YOU CAN COPY THE WHOLE BLOCK BELOW -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
<!-- ... -->
</dict>

Xcode 13を使用して新しいSwiftUIアプリを作成する場合、Info.plistなどの設定ファイルは不要です。このファイルが見当たらない場合は、プロジェクトターゲットをクリックし、Info、Url Types の下で、「+」をクリックして新しいURL Typeを追加します。URL Schemsに myapp を追加します。CFBundleURLSchemesのエントリを含むInfo.plistファイルが表示されます。

Web UI サインインを起動

Web UIでサインインを起動する準備ができました。signInWithWebUI APIはpresentationAnchorを必要とし、iOSアプリの場合、アプリのメインUIWindowになります。以下のコード例は、UIViewControllerにいて、self.view.window でUIWindowインスタンスを取得できることを前提としています。

func signInWithWebUI() async {
do {
let signInResult = try await Amplify.Auth.signInWithWebUI(presentationAnchor: self.view.window!)
if signInResult.isSignedIn {
print("Sign in succeeded")
}
} catch let error as AuthError {
print("Sign in failed \(error)")
} catch {
print("Unexpected error: \(error)")
}
}
func signInWithWebUI() -> AnyCancellable {
Amplify.Publisher.create {
try await Amplify.Auth.signInWithWebUI(presentationAnchor: self.view.window!)
}.sink {
if case let .failure(authError) = $0 {
print("Sign in failed \(authError)")
}
}
receiveValue: { signInResult in
if signInResult.isSignedIn {
print("Sign in succeeded")
}
}
}

サインイン中にプライベートセッションを優先

Amplify 1.6.0以降、Amplify.Auth.signInWithWebUI はiOS 13.0以上では内部で ASWebAuthenticationSession を自動的に使用します。古いiOSバージョンの場合は、SFAuthenticationSession にフォールバックします。 このリリースでは、サインインフロー中に AWSAuthWebUISignInOptions に新しい preferPrivateSession フラグも導入されています。サインイン中に preferPrivateSessiontrue に設定されている場合、ユーザーはサインアウト時にweb ビューが表示されません。preferPrivateSession は内部で ASWebAuthenticationSession.prefersEphemeralWebBrowserSession を設定し、ユーザーの優先ブラウザがサポートしている場合、認証セッションはプライベートになります。

try await Amplify.Auth.signInWithWebUI(
presentationAnchor: self.view.window!,
options: .preferPrivateSession()
) {
...
}

サインイン中の追加オプション

Amplify.Auth.signInWithWebUI に追加のパラメータを渡すことができます。これらは Cognitoの認可エンドポイント へのリクエストでクエリパラメータとして追加されます。

let options = AuthWebUISignInRequest.Options(
pluginOptions: AWSAuthWebUISignInOptions.init(
nonce: "randomUUID",
language: "en",
loginHint: "username",
prompt: [.login, .consent],
resource: "http://localhost"))
let signInResult = try await Amplify.Auth.signInWithWebUI(
presentationAnchor: self.view.window!,
options: options)