문서 메뉴
문서 홈
/ /
Atlas Device SDK
/ /

사용자 인증 - .NET SDK

이 페이지의 내용

  • 로그인
  • 익명의 사용자
  • 이메일/비밀번호 사용자
  • API 키 사용자
  • 사용자 지정 JWT 사용자
  • 사용자 지정 기능 사용자
  • 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 웹 토큰 인증 제공자 를 활성화한 경우 다음 코드를 사용하여 로그인할 수 있습니다.

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 프로필 사진 URL 저장 안 함

Facebook 프로필 사진 URL에는 이미지 권한을 부여하는 사용자의 액세스 토큰이 포함되어 있습니다. 보안을 위해 사용자의 액세스 토큰이 포함된 URL을 저장하지 마세요. 대신 이미지를 가져와야 할 때 사용자의 메타데이터 필드에서 직접 URL에 액세스합니다.

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

Google 인증 을 활성화한 경우 다음 코드를 사용하여 로그인할 수 있습니다.

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

Apple 인증으로 로그인 을 활성화한 경우 다음 코드를 사용하여 로그인할 수 있습니다.

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

token contains an invalid number of segments(이)라는 Login failed 오류가 발생하면 JWT의 UTF-8 인코딩 문자열 버전을 전달하고 있는지 확인하세요.

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 속성을 사용하여 사용자 객체를 검색할 수 있습니다. CurrentUser 객체는 로컬 저장소에 유지되므로 초기 인증 후 앱이 종료되더라도 사용자가 로그아웃하지 않는 한 LoginAsync 를 다시 호출할 필요가 없습니다. 대신 PartitionSyncConfiguration 객체인 Realm.GetInstance(config) 를 사용합니다. config 이 접근 방식을 사용하면 시작 속도가 빨라지고 사용자가 오프라인으로 작업할 수도 있습니다.

사용자가 로그인하면 Atlas App Services는 사용자에게 앱에 대한 액세스 권한을 부여하는 액세스 토큰을 생성합니다. Realm SDK는 액세스 토큰을 자동으로 관리하고 만료되면 갱신하며 각 요청마다 현재 사용자에 대한 유효한 액세스 토큰을 포함합니다. Realm은 새로 고침 토큰을 자동으로 갱신 하지 않습니다. 새로 고침 토큰이 만료되면 사용자는 다시 로그인해야 합니다.

SDK 외부로 요청을 보내는 경우 각 요청에 사용자의 액세스 토큰을 포함하고 토큰이 만료되면 수동으로 새로 고쳐야 합니다.

다음 예와 같이 SDK의 Realm.User 객체에서 로그인한 사용자의 액세스 토큰에 액세스하고 새로 고칠 수 있습니다.

// 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 문서에서 사용자 세션 관리를 참조하세요.

버전 v11.6.0의 새로운 기능.

유효한 사용자 객체에서 User.Changed() 를 호출하여 인증 변경 이벤트의 흐름을 관찰할 수 있습니다.

현재, User.Changed() 는 모든 사용자 이벤트에서 Atlas Triggers되며 이벤트에 대한 응답이 멱등성이 있는지 확인하려면 핸들러를 추가해야 합니다.

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

돌아가기

사용자 생성 및 삭제

다음

사용자 지정 사용자 데이터