Microsoft 계정 로그인에 대한 요구 사항
언어: HTML | XAML

Microsoft 계정 로그인에 대한 요구 사항(XAML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

C++, C# 또는 Visual Basic으로 작성한 Windows 런타임 앱은 Outlook.com 및 Microsoft OneDrive 같은 Microsoft 클라우드 서비스의 사용자 데이터에 앱이 액세스할 수 있도록 Microsoft 계정으로 사용자를 로그인/로그아웃할 수 있습니다.

다른 Windows 런타임 앱과 일치하는 사용자 환경을 제공하도록 앱의 로그인/로그아웃 환경을 디자인할 때 이러한 지침을 적용합니다. 이 지침은 앱이 사용자 데이터의 보안을 유지하는 데에도 도움이 됩니다.

중요  이 항목의 자습서에서는 Windows 스토어 앱에 대해 설명합니다. Windows Phone 스토어 앱에 Microsoft 서비스를 추가할 수도 있습니다. 하지만 Windows Phone 사용자 인터페이스는 플라이아웃을 지원하지 않으므로 Windows Phone 스토어 앱의 페이지를 사용하여 이 항목에서 사용되는 플라이아웃에 대한 기능을 구현해야 합니다.
 

개요

Outlook.com 및 OneDrive 같은 Microsoft 클라우드 서비스의 사용자 데이터에 액세스하려면 사용자가 Microsoft 계정으로 로그인하고 앱에 필요한 데이터를 액세스하는 데 동의해야 합니다. 사용자가 컴퓨터의 다른 사용자로부터 데이터 보안을 유지하는 데 도움이 되도록 Windows 스토어 앱은 사용자가 앱에서 로그아웃할 수도 있도록 해야 합니다. 이 항목에서는 이 작업을 수행하는 방법에 대해 설명합니다.

중요  앱에서 사용자가 로그아웃할 수 있도록 허용하지 않을 경우 사용자가 처음 로그인할 때 사용한 사용자 계정에서 앱을 열 때마다 앱이 사용자 데이터에 액세스할 수 있습니다. 이렇게 하면 컴퓨터를 공유하거나 분실하지 않는 사용자에게는 편리하지만, 다른 사용자가 컴퓨터를 사용하거나 컴퓨터가 도난 당할 경우 보안이 취약해질 수 있습니다. 이런 이유로, Windows 스토어 앱은 항상, 사용자 계정에 로그인되었을 때 이를 나타내고 사용자에게 로그아웃하는 옵션을 제공해야 합니다.
 

다음 단계는 앱이 사용자 프로필 정보에 액세스할 수 있는 방법을 대략적으로 설명합니다. 자세한 내용은 여기를 참조하세요.

  1. 앱에 설정 명령 추가

    앱의 설정 창에서 이 두 항목을 추가합니다.

    • 계정

      설정 창의 계정 명령은 사용자가 Microsoft 계정에 로그인/로그아웃할 수 있는 플라이아웃을 표시합니다.

    • 개인 정보 취급 방침

      설정 창의 개인 정보 명령은 앱의 개인 정보 취급 방침이 포함된 플라이아웃을 표시합니다.

  2. 개인 정보 취급 방침 제공

    자세한 내용은 Windows 및 Windows Phone 스토어 정책을 참조하세요.

  3. 사용자 로그인

    앱이 시작될 때 자동으로 사용자를 로그인할 수도 있고, Outlook.com 및 OneDrive 같은 Microsoft 클라우드 서비스에 저장된 데이터에 액세스해야 하는 경우에만 사용자를 로그인할 수도 있습니다. 각 방법의 절차는 나중에 사용자 로그인에서 설명합니다.

  4. 사용자 로그아웃

    앱이 사용되는 방식을 고려합니다. 앱이 사용자가 중요하게 여길 수 있는 데이터에 액세스하는 경우 자동으로 사용자를 로그아웃하여 무단 액세스를 방지해야 합니다. 그러나 앱이 보안 환경에서 사용되는 경우 계정 설정 명령을 사용하여 사용자가 수동으로 로그아웃할 때까지 그대로 둘 수 있습니다. 각 방법의 절차는 나중에 사용자 로그아웃에서 설명합니다.

    중요  

    앱이 Microsoft 계정에 연결되었을 때와 연결되지 않았을 때 사용자가 항상 알고 있어야 합니다.

     
  5. 앱의 UI에 로그인 상태 표시

    앱의 UI에 일종의 표시를 추가하여 사용자가 로그인되고 앱이 사용자 정보에 액세스할 수 있을 때 이를 표시합니다.

    참고  사용자가 로그인되었을 때 앱이 사용자에게 알리는 것이 중요합니다. 간단하게 이름을 표시하거나, Microsoft 클라우드 서비스에 저장된 데이터에서 가져온 요소를 나열하여 알릴 수 있습니다. 예를 들어 앱이 OneDrive에서 가져온 사용자 사진을 표시하는 경우 사용자가 로그인되었을 때는 사진 목록을 표시하고, 로그인되지 않았을 때는 로그인해야 한다는 메시지를 표시할 수 있습니다.
     

필수 설정 추가

이 섹션에서는 설정 창에 필수 설정 명령을 추가하는 방법에 대해 설명합니다.

  1. 개인 정보 플라이아웃을 만듭니다.

    1. Microsoft Visual Studio의 솔루션 탐색기에서 앱을 마우스 오른쪽 단추로 클릭하고 추가 > 새 항목... 명령을 선택하여 새 SettingsFlyout 컨트롤을 추가합니다.
    2. 새 항목 추가 브라우저에서 설치됨 > Visual C# > Windows 스토어를 선택하여 사용 가능한 항목을 나열합니다.
    3. 목록에서 설정 플라이아웃을 선택하고 이름 필드에 Privacy.xaml을 입력한 다음 추가를 클릭합니다.
    4. Privacy.xaml을 열고 TextbBlock.Text 요소를 다음 요소로 바꾼 다음 지정된 요소를 앱과 일치하도록 변경합니다.
      
      <!-- Replace the app class name in x:Class and xmlns:local    -->
      <!--   with the class name of your app                        -->
      
      <SettingsFlyout
          x:Class="App.Privacy"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:App"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          IconSource="Assets/SmallLogo.png"
          Title="Privacy"
          d:DesignWidth="346">
      
          <!-- This StackPanel acts as a root panel for vertical layout of the content sections -->
          <StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
      
              <!-- The StackPanel(s) below define individual content sections -->
      
              <!-- Content Section 1-->
              <StackPanel Style="{StaticResource SettingsFlyoutSectionStyle}">
                  <!-- Section 1 header -->
                  <TextBlock Style="{StaticResource TitleTextBlockStyle}" Text="Privacy statement" />
                  <!-- Section 1 body -->
                  <TextBlock Style="{StaticResource BodyTextBlockStyle}" Margin="0,0,0,25" TextWrapping="Wrap">
                      <TextBlock.Text>
                          Your privacy statement here.
                      </TextBlock.Text>
                  </TextBlock>
      
              </StackPanel>
              <!-- Define more Content Sections below as necessary -->
          </StackPanel>
      </SettingsFlyout>
      
      
      
    5. 앱의 App.xaml.cs 파일에서 설정 창에 어셈블리 참조 및 개인 정보 플라이아웃을 추가하여 사용자에게 표시합니다.
      
      // add the assembly for the Settings flyout
      using Windows.UI.ApplicationSettings;
      using System.Threading.Tasks;
      
      
      
      
      protected override void onWindowCreated(WindowCreatedEventArgs args)
      {
          SettingsPane.GetForCurrentView().CommandsRequested += onCommandsRequested;
      }
      
      void onCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs e)
      {
          SettingsCommand privacyCommand = new SettingsCommand("privacy", "Privacy", (handler) =>
          {
              Privacy privacyFlyout = new Privacy();
              privacyFlyout.Show();
          });
          e.Request.ApplicationCommands.Add(privacyCommand);
      }
      
      
    참고  이제 앱을 빌드하여 지금까지 제대로 작동하는지 확인할 수 있습니다.
     
  2. 로그인 단추를 사용하여 계정 플라이아웃을 만듭니다.

    이 단계의 코드는 계정 플라이아웃의 레이아웃을 정의합니다(아래 스크린샷 참조).

    이 단계에서 만든 계정 플라이아웃의 스크린샷
    1. 솔루션 탐색기에서 앱을 마우스 오른쪽 단추로 클릭하고 추가 > 새 항목 명령을 사용하여 새 SettingsFlyout을 추가합니다.
    2. 새 항목 추가 브라우저에서 설치됨 > Visual C# > Windows 스토어를 선택하여 사용 가능한 항목을 나열합니다.
    3. 목록에서 설정 플라이아웃 컨트롤을 선택하고 이름 필드에 Account.xaml을 입력한 다음 추가를 클릭합니다.
    4. Account.xaml을 열고 SettingsFlyout 요소를 다음 요소로 바꾼 다음 지정된 요소를 앱과 일치하도록 변경합니다.
      
      <!-- Replace the app class name in x:Class and xmlns:local    -->
      <!--   with the class name of your app                        -->
      <SettingsFlyout
          x:Class="App.Account"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:App"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          IconSource="Assets/SmallLogo.png"
          Title="Account"
          d:DesignWidth="346">
      
              <!-- Content Section 1-->
          <StackPanel x:Name="accountName">
              <TextBlock Name="userName" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="Wrap" 
                  Margin="0,0,0,25" Text="You're not signed in."/>
              <!-- both buttons are defined to occupy the same place in the UI -->
              <!-- however only one is visible at a time, to prevent flicker or confusion -->
              <!-- they are defined as Collapsed so neither is visibly by default -->
              <Button x:Name="signInBtn" Click="SignInClick" Content="Sign in" Visibility="Collapsed"/>
              <Button x:Name="signOutBtn" Click="SignOutClick" Content="Sign out" Visibility="Collapsed"/>
          </StackPanel>
      </SettingsFlyout>
      
      
      
    5. 앱의 App.xaml.cs 파일에서 설정 창에 어셈블리 참조 및 계정 플라이아웃을 추가하여 사용자에게 표시합니다.

      참고  이 코드를 App.xaml.cs의 onCommandsRequested 메서드에 추가합니다.
       
      
      
          SettingsCommand accountCommand = new SettingsCommand("account", "Account", (handler) =>
          {
              Account accountFlyout = new Account();
              accountFlyout.Show();
          });
          e.Request.ApplicationCommands.Add(accountCommand);
      }
      
      
    참고  먼저 로그인로그아웃 단추의 처리기를 추가해야 하므로 앱을 빌드할 수 없습니다. 이 내용에 대해서는 다음 단계에서 설명합니다.
     
  3. 이 단계에서는 텍스트 필드에 채울 수 있도록 사용자 프로필의 정보를 가져오고 계정 플라이아웃에 올바른 단추를 표시하는 방법에 대해 설명합니다.

    Live SDK에 대한 참조를 추가한 다음, 사용자 Microsoft 계정 프로필에서 사용자 이름을 가져오고 UI의 TextBlock 개체에 쓰는 메서드를 만듭니다. 이 메서드는 요청 시 사용자를 로그인합니다.

    앱의 기본 코드 파일(예제: App.xaml.cs)에서 이 메서드를 정의합니다. 그러면 앱의 모든 페이지에서 이 메서드를 호출하여 사용자 이름을 표시(사용자가 Microsoft 계정에 로그인된 경우)하거나 사용자가 로그인되지 않았다는 메시지를 표시(로그인되지 않은 경우)할 수 있습니다.

    이 예제에서는 사용자 프로필 정보에 액세스하는 데 필요한 최소 범위인 wl_basic 범위로 사용자를 로그인합니다. 무단 액세스로부터 사용자 데이터를 보호하기 위해 앱은 원하는 데이터에 대한 액세스를 허용하는 가장 제한적인 범위를 요청해야 합니다.

    중요  앱이 Live SDK에서 직접 사용자 로그인 상태를 가져오고 이 값을 캐시하지 않는 것이 중요합니다. 이렇게 하면 앱에 표시되는 사용자 로그인 상태가 Live SDK에서 관리되는 사용자의 실제 로그인 상태와 동기화되지 않는 문제를 방지할 수 있습니다.
     
    
    using Microsoft.Live;
    
    
    
    
    public static async Task updateUserName (TextBlock userName, Boolean signIn)
    {
        try
        {
            // Open Live Connect SDK client.
            LiveAuthClient LCAuth = new LiveAuthClient();
            LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
            try
            {
                LiveLoginResult loginResult = null;
                if (signIn)
                {
                    // Sign in to the user's Microsoft account with the required scope.
                    //  
                    //  This call will display the Microsoft account sign-in screen if 
                    //   the user is not already signed in to their Microsoft account 
                    //   through Windows 8.
                    // 
                    //  This call will also display the consent dialog, if the user has 
                    //   has not already given consent to this app to access the data 
                    //   described by the scope.
                    // 
                    //  Change the parameter of LoginAsync to include the scopes 
                    //   required by your app.
                    loginResult = await LCAuth.LoginAsync(new string[] { "wl.basic" });
                }
                else
                {
                    // If we don't want the user to sign in, continue with the current 
                    //  sign-in state.
                    loginResult = LCLoginResult;
                }
                if (loginResult.Status == LiveConnectSessionStatus.Connected)
                {
                    // Create a client session to get the profile data.
                    LiveConnectClient connect = new LiveConnectClient(LCAuth.Session);
    
                    // Get the profile info of the user.
                    LiveOperationResult operationResult = await connect.GetAsync("me");
                    dynamic result = operationResult.Result;
                    if (result != null)
                    {
                        // Update the text of the object passed in to the method. 
                        userName.Text = string.Join(" ", "Hello", result.name, "!");
                    }
                    else
                    {
                        // Handle the case where the user name was not returned. 
                    }
                }
                else
                {
                    // The user hasn't signed in so display this text 
                    //  in place of his or her name.
                    userName.Text = "You're not signed in.";
                }
            }
            catch (LiveAuthException exception)
            {
                // Handle the exception. 
            }
        }
        catch (LiveAuthException exception)
        {
                // Handle the exception. 
        }
        catch (LiveConnectException exception)
        {
                // Handle the exception. 
        }
    }
    
    
    
      표시 페이지의 코드 숨김에서 이 메서드를 호출하여 사용자에게 Microsoft 계정에 로그인되었는지 여부를 표시할 수 있습니다.
     
  4. Account.xaml.cs 코드 숨김 파일에 로그인/로그아웃 논리를 추가합니다.

    1. Live SDK에 대한 참조를 추가한 다음, 사용자의 로그인 상태를 쿼리하고 계정 플라이아웃의 UI를 일치하도록 업데이트하는 메서드를 만듭니다.

      
      using Microsoft.Live;
      using System.Threading.Tasks;
      
      
      
      
      private async Task SetNameField(Boolean login) {
          // If login == false, just update the name field. 
          await App.updateUserName(this.userName, login);
      
          // Test to see if the user can sign out.
          Boolean userCanSignOut = true;
      
          LiveAuthClient LCAuth = new LiveAuthClient();
          LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
      
          if (LCLoginResult.Status == LiveConnectSessionStatus.Connected)
          {
              userCanSignOut = LCAuth.CanLogout;
          }
          
          if (this.userName.Text.Equals("You're not signed in."))
          {
              // Show sign-in button.
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Visible;
              signOutBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
          else
          {
              // Show sign-out button if they can sign out.
              signOutBtn.Visibility = (userCanSignOut ? Windows.UI.Xaml.Visibility.Visible : Windows.UI.Xaml.Visibility.Collapsed);
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
      }
      
      
      
    2. 이 메서드 호출을 Account() 생성자에 추가하여 사용자가 설정 창에서 열 때 플라이아웃을 초기화합니다.
      
      SetNameField(false);
       
      
      
    3. 로그인 단추를 탭할 때 발생하는 이벤트를 처리하는 코드를 추가합니다.

      이 메서드는 SetNameField를 호출하여 사용자를 로그인하고 계정 플라이아웃 UI를 업데이트합니다.

      
      private async void SignInClick(object sender, RoutedEventArgs e)
      {
        // This call will sign the user in and update the Account flyout UI.
        await SetNameField(true);
      }
      
      
    4. 로그아웃 단추를 탭할 때 사용자를 로그아웃하는 코드를 추가합니다.

      
      private async void SignOutClick(object sender, RoutedEventArgs e)
      {
          try
          {
              // Initialize access to the Live Connect SDK.
              LiveAuthClient LCAuth = new LiveAuthClient();
              LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
              // Sign the user out, if he or she is connected;
              //  if not connected, skip this and just update the UI
              if (LCLoginResult.Status == LiveConnectSessionStatus.Connected)
              {
                  LCAuth.Logout();
              }
      
              // At this point, the user should be disconnected and signed out, so
              //  update the UI.
              this.userName.Text = "You're not signed in.";
      
              // Show sign-in button.
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Visible;
              signOutBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
          catch (LiveConnectException x)
          {
              // Handle exception.
          }
      }
      
      
      
  5. 앱을 빌드하고 방금 추가한 SettingsFlyout을 테스트합니다.

    설정 창의 계정개인 정보 명령은 다음 스크린샷과 같이 나타나야 합니다.

    이 단계에서 추가된 계정 및 개인 정보 명령을 표시하는 설정 참 메뉴
  6. 앱이 실행되고 사용자가 Microsoft 계정에 로그인되지 않은 경우 설정 창에서 계정 명령을 탭하면 다음과 유사한 플라이아웃이 표시됩니다.

    사용자 로그인 환경을 보여 주는 스크린샷

    사용자가 로그인 단추를 탭하면 다음 화면이 나타납니다.

    1. Microsoft 계정 로그인 UI

      Microsoft 계정 로그인 UI의 스크린샷

    2. Live Connect 동의 UI(사용자가 아직 이 앱에 동의하지 않은 경우)

      Live Connect 동의 UI의 스크린샷

    3. 사용자가 로그인 및 동의하면 앱으로 돌아갑니다.
  7. 사용자가 Microsoft 계정에 이미 로그인되었으며 로그아웃할 수 있는 경우 다음과 유사한 플라이아웃이 나타납니다.

    사용자가 로그아웃할 수 있을 때 사용자 로그아웃 환경을 표시하는 스크린샷

  8. 사용자가 Microsoft 계정에 이미 로그인되었으며 로그아웃할 수 없는 경우 다음과 유사한 플라이아웃이 나타납니다.

    사용자가 로그아웃할 수 없을 때 사용자 로그아웃 환경을 표시하는 스크린샷

  9. 사용자가 로그인한 후 앱의 UI를 업데이트하여 사용자 이름을 표시합니다.

    사용자 이름이 표시된 앱의 스크린샷
참고  이 단계의 코드 예제는 설정 창에 대한 플라이아웃만 정의합니다. 사용자 이름을 표시하려면 앱의 표시 페이지에 태그와 코드를 추가해야 합니다.
 

사용자 로그인

사용자를 Windows 스토어 앱에 로그인하는 두 가지 방법이 있습니다. 앱에서 사용자 로그인이 필요한 시기에 따라 선택하는 방법이 달라집니다.

  • 사용자가 로그인되지 않았을 때도 앱이 작동하지만 특정 시나리오나 기능을 사용하기 위해 사용자가 로그인해야 하는 경우 앞에서 설명한 설정 창의 계정 UI를 통해 사용자가 로그인하게 합니다.

    사용자 로그인에 대한 자세한 내용은 Live Connect 설명서사용자 로그인을 참조하세요.

  • 사용자가 로그인할 때까지 앱이 작동하지 않거나 전체 환경을 제공하지 않는 경우 앱이 시작된 후 즉시 Microsoft 계정 로그인 대화 상자를 표시합니다. 이 대화 상자를 표시하려면 Microsoft.Live.LiveAuthClient.LoginAsync 메서드를 호출합니다.

    예를 들면 다음과 같습니다.

    
    public LiveConnectSession Session
    {
         get
         {
             return _session;
         }
         set
         {
             _session = value;
         }
    }
    
    private async void InitAuth()
    {
        if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
        {
           authClient = new LiveAuthClient();
           LiveLoginResult authResult = 
               await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.basic", "wl.skydrive" });
           if (authResult.Status == LiveConnectSessionStatus.Connected)
           {
               this.Session = authResult.Session;
           }
        }
    }
    
    

    자세한 내용은 Live Connect 설명서사용자 로그인(영문)을 참조하세요.

  • 사용자가 먼저 로그인하지 않아도 앱이 작동하지만 Outlook.com 및 OneDrive 같은 Microsoft 클라우드 서비스와 통합되는 특정 명령을 제공하는 경우 앱은 이러한 명령이 지정될 때 Microsoft 계정 로그인 UI를 표시할 수 있습니다. 예를 들어 사진 편집 앱의 앱 바에는 Save photo to OneDrive(OneDrive에 사진 저장) 명령이 포함될 수 있습니다. 이 시나리오를 지원하려면 해당 명령의 앱 바 명령 처리기에서 사진 저장 코드 바로 앞에 이 예제의 코드를 추가하여 사용자를 Microsoft 계정에 로그인합니다. 사진 저장 코드는 이 예제에 표시되어 있지 않습니다.

    다음은 앱 바 명령에서 사용자를 로그인하는 예제입니다.

    
    private void AppBarSaveButton_Click(object sender, RoutedEventArgs e)
    {
        InitAuth();
    }
    
    private async void InitAuth()
    {
        if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
        {
            authClient = new LiveAuthClient();
            LiveLoginResult authResult = 
                await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.basic", "wl.skydrive" });
            if (authResult.Status == LiveConnectSessionStatus.Connected)
            {
                // An app-level property for the session.
                App.Session = authResult.Session;
            }
        }
    }
    
    

    Single Sign-On을 사용하면 사용자가 로그인 또는 동의해야 하는 경우에만 로그인 UI 또는 동의 UI가 표시됩니다. Microsoft 계정에 이미 로그인되었으며 앱이 사용자 데이터에 액세스하도록 이미 동의한 경우에는 추가 UI가 표시되지 않습니다.

    중요  

    사용자가 Microsoft 계정에 로그인되었을 때 이를 명확하게 알 수 있어야 합니다.

     

사용자 로그아웃

Windows 8에서 앱이 사용자의 Microsoft 계정을 사용하여 리소스에 연결할 수 있는 경우 사용자에게 로그아웃 방법을 제공해야 합니다.

참고  사용자가 Microsoft 계정이나 Microsoft 계정에 연결된 로컬 또는 도메인 계정을 사용하여 Windows 8에 로그인하는 경우에는 사용자 지정 로그아웃 단추를 제공하더라도 아무 효과가 없습니다.
 

사용자를 로그아웃하게 하려면 Microsoft.Live.LiveAuthClient.Logout() 메서드를 호출합니다.

피해야 할 사례

다음은 주의할 사항입니다.

  • 텍스트, 컨트롤, 또는 이 항목에서 설명하지 않은 로그인 및 로그아웃 대화 상자를 앱에 표시하지 마세요. Microsoft 계정 로그인 환경을 사용하면 앱에서 직접 Microsoft 계정 자격 증명에 액세스할 수 없음을 사용자에게 확인시켜 줄 수 있습니다.
  • 사용자 지정 로그인/로그아웃 컨트롤을 설정 창이 아닌 위치나 앱의 작업 명령 흐름의 일부로 표시하지 마세요.

 

 

표시:
© 2016 Microsoft