Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

ユーザーの認証 - .NET SDK

項目一覧

  • ログイン
  • 匿名ユーザー
  • メール/パスワード ユーザー
  • API キー ユーザー
  • カスタムJSON web tokenユーザー
  • カスタム関数ユーザー
  • Facebook ユーザー
  • Google ユーザー
  • Apple ユーザー
  • オフライン ログイン
  • ユーザーのログアウト
  • 現在のユーザーを取得
  • ユーザー アクセス トークンを取得する
  • リフレッシュ トークンの有効期限
  • 認証の変更を監視

SDK は、有効な認証プロバイダーを使用してユーザーを認証するための API を提供します。 認証情報オブジェクトをインスタンス化し、それをLogInAsync()メソッドに渡して、ユーザーインスタンスを認証して取得します。 Credentialsクラスは、各認証プロバイダに対応するファクトリー メソッドを公開します。

ユーザーを認証する前に、以下があることを確認してください。

App Services UI で匿名認証を有効にした場合、ユーザーは識別情報を提供せずにすぐにアプリにログインできます。 次のコードは、これを行う方法を示しています。

var user = await app.LogInAsync(Credentials.Anonymous());

メール/パスワード認証を有効にしている場合は、次のコードを使用してログインできます。

var user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));

API キー認証を有効にしている場合は、次のコードを使用してログインできます。

var user = await app.LogInAsync(Credentials.ApiKey(apiKey));

カスタムJSON web token認証プロバイダを有効にした場合は、次のコードを使用してログインできます。

var user =
await app.LogInAsync(Credentials.JWT(jwt_token));

カスタム関数認証プロバイダを有効にした場合は、次のコードを使用してログインできます。

var functionParameters = new
{
username = "caleb",
password = "MySekritPwd",
IQ = 42,
hasPets = true
};
var user =
await app.LogInAsync(Credentials.Function(functionParameters));

Facebook認証プロバイダーは、既存の Facebook アカウントを使用して Facebook アプリを通じてユーザーを認証することを可能にします。

重要

Facebook 認証プロバイダーを有効にする

ユーザーを既存の Facebook アカウントでログインするには、アプリケーションのFacebook 認証プロバイダを設定して有効にする必要があります。

重要

Facebook プロファイル画像 URL を保存しないでください

Facebook のプロファイル画像 URL には、画像の使用許可を付与するためのユーザーのアクセス トークンが含まれます。 セキュリティを確保するために、ユーザーのアクセストークンを含む URL を保存しないでください。 代わりに、画像を取得する必要がある場合は、ユーザーのメタデータ フィールドから URL に直接アクセスします。

var user =
await app.LogInAsync(Credentials.Facebook(facebookToken));

Google 認証を有効にしている場合は、次のコードを使用してログインできます。

var user =
await app.LogInAsync(Credentials.Google(googleAuthCode, GoogleCredentialType.AuthCode));

Sign in with Apple 認証 を有効にしている場合は、次のコードを使用してログインできます。

var user =
await app.LogInAsync(Credentials.Apple(appleToken));

Tip

Login failedというエラーが発生した場合は、 のtoken contains an invalid number of segments UTF-8string でエンコードされたJSON web token バージョンを渡していることを確認してください。

Realm アプリケーションはユーザーを認証する際、ユーザーの認証情報をキャッシュします。 既存のユーザー認証情報を確認して、ログイン フローをバイパスし、キャッシュされたユーザーにアクセスできます。 これを使用して、Realm をオフラインで開きます。

注意

最初のログインにはネットワーク接続が必要です

ユーザーがアプリにサインアップしたり、クライアントに既存のアカウントを使用して初めてログインする場合、クライアントにはネットワーク接続が必要です。 キャッシュされたユーザー認証情報を確認すると、ユーザーが以前にオンライン時にログインしたことがある場合にのみ、オフラインで Realm を開くことができます。

次の例では、キャッシュされた ユーザー オブジェクトがあるかどうかを確認しています。 停止しない場合、ユーザーはログインします。 それ以外の場合は、キャッシュされた認証情報が使用されます。

if (app.CurrentUser == null)
{
// App must be online for user to authenticate
user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("_part", user);
realm = await Realm.GetInstanceAsync(config);
}
else
{
// This works whether online or offline
user = app.CurrentUser;
config = new PartitionSyncConfiguration("_part", user);
realm = Realm.GetInstance(config);
}

ログインしたら、 LogOutAsync()メソッドを呼び出してログアウトできます。

await user.LogOutAsync();

警告

ユーザーがログアウトすると、ユーザーが開いた同期された Realm でデータの読み取りも書き込みもできなくなります。 その結果、開始ユーザーがログアウトする前にまだ完了していない操作は正常に完了できず、エラーが発生する可能性が高くなります。 このように失敗した書込み操作のデータは失われます。

認証済みユーザーを作成したら、 App.currentUserプロパティを使用して User オブジェクトを検索できます。 CurrentUserオブジェクトはローカル ストレージに保存されているため、初期認証後にアプリがシャットダウンした場合でも、 LoginAsyncを再度呼び出す必要はありません(ユーザーがログアウトした場合を除く)。 代わりに、 Realm.GetInstance(config)を使用してください。ここで、 configFlexibleConfigurationオブジェクトです。 このアプローチにより起動がより迅速になり、ユーザーはオフラインで作業できるようになります。

ユーザーがログインすると、Atlas App Services はユーザー用のアクセス トークンを作成し、アプリへのアクセスを許可します。 Realm SDK はアクセス トークンを自動的に管理し、有効期限が切れると更新し、リクエストごとに現在のユーザーの有効なアクセス トークンを含めます。 Realm はリフレッシュ トークンを自動的に更新しません。 リフレッシュ トークンの有効期限が切れると、ユーザーは再度ログインする必要があります。

SDK 外でリクエストを送信する場合は、リクエストごとにユーザーのアクセス トークンを含め、有効期限が切れたときにトークンを手動で更新する必要があります。

次の例のように、 Realm.Userオブジェクトから SDK 内のログイン ユーザーのアクセス トークンにアクセスして更新できます。

// Returns a valid user access token to authenticate requests
public async Task<string> GetValidAccessToken(User user)
{
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it.
await user.RefreshCustomDataAsync();
return user.AccessToken;
}

リフレッシュ トークンは一定期間後に期限切れになります。 更新トークンの有効期限が切れると、アクセス トークンの更新ができなくなり、ユーザーは再度ログインする必要があります。

Realm が開いた後に更新トークンの有効期限が切れると、ユーザーが再度ログインするまでデバイスは同期できなくなります。 同期エラー ハンドラーには、同期試行時にトークンの期限切れエラーを検出し、ユーザーをログイン フローにリダイレクトするロジックを実装する必要があります。

リフレッシュ トークンの有効期限の設定の詳細については、App Services ドキュメントの「ユーザー セッションの管理」を参照してください。

バージョン 11.6.0 の新機能

有効なユーザー オブジェクトでUser.changed()を呼び出すと、認証変更イベントのフローを観察できます。

現在、 User.Changed()はすべてのユーザー イベントでトリガーされているため、イベントへの応答が冪等であるようにするためにハンドラーを追加する必要があります。

app.CurrentUser.Changed += (change, _) =>
{
Debug.WriteLine($"Auth change: {change}, {_}");
};

戻る

ユーザーの作成と削除