2016-01-06 2 views
0

Я использую SDK onedrive в приложении Cross Plattform. В Windows аутентификация работает через OneDriveClientExtensions.GetClientUsingWebAuthenticationBroker.Аутентификация с помощью OneDrive SDK в приложении Xamarin для Android

Теперь я пытаюсь войти в систему на Android. Я попробовал это с этим:

oneDriveClient = OneDriveClient.GetMicrosoftAccountClient(
        appId: MSA_CLIENT_ID, 
        returnUrl: RETURN_URL, 
        scopes: scopes, 
        clientSecret: MSA_CLIENT_SECRET); 
       await oneDriveClient.AuthenticateAsync(); 

Но получаю сообщение об ошибке, чтобы не было получено действительного токена. Должен ли я реализовать собственный AuthenticationProvider inhereting из WebAuthenticationBrokerAuthenticationProvider, который показывает браузер для oauth? Или что было бы здесь?

ответ

0

Я решил это, используя компонент Xamarin Auth. Получает код, который вызывает веб-просмотр с логином:

 private const string RETURN_URL = @"https://login.live.com/oauth20_desktop.srf"; 

private void ShowWebView() 
    { 
     var auth = new OAuth2Authenticator(
       clientId: MSA_CLIENT_ID, 
       scope: string.Join(",", scopes), 
       authorizeUrl: new Uri(GetAuthorizeUrl()), 
       redirectUrl: new Uri(RETURN_URL)); 

     auth.Completed += (sender, eventArgs) => 
     { 
      if (eventArgs.IsAuthenticated) 
      { 
       //Do Something 
      } 
     }; 

     var intent = auth.GetUI(Application.Context); 
     intent.SetFlags(ActivityFlags.NewTask); 

     Application.Context.StartActivity(intent); 
    } 

    private string GetAuthorizeUrl() 
    { 
     var requestUriStringBuilder = new StringBuilder(); 
     requestUriStringBuilder.Append("https://login.live.com/oauth20_authorize.srf"); 
     requestUriStringBuilder.AppendFormat("?{0}={1}", Constants.Authentication.RedirectUriKeyName, RETURN_URL); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", Constants.Authentication.ClientIdKeyName, MSA_CLIENT_ID); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", Constants.Authentication.ScopeKeyName, 
      string.Join("%20", scopes)); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", Constants.Authentication.ResponseTypeKeyName, 
      Constants.Authentication.TokenResponseTypeValueName); 

     return requestUriStringBuilder.ToString(); 
    } 
Смежные вопросы