2016-10-04 12 views
0

Xamarin.Authを使用してOneDriveサービスで認証します。これはしばらくの間うまくいきましたが、サービス上の変更がどこで機能しなくなったかわかりました。 新しいバージョン2.0にアップグレードしてもう一度動作させようとします。これまでの初期認証はうまくいきます。しかし、しばらくすると、いつもクラッシュするようになりました。私はonedriveサービスから返されたrefrehsトークンがないことに気付きました。OneDriveサービスでリフレッシュトークンが取得されない

これは、認証UIを呼び出すためのコードです:

private Task<IDictionary<string, string>> ShowWebView() 
    { 
     var tcs = new TaskCompletionSource<IDictionary<string, string>>(); 

     var auth = new OAuth2Authenticator(ServiceConstants.MSA_CLIENT_ID, 
      string.Join(",", ServiceConstants.Scopes), 
      new Uri(GetAuthorizeUrl()), 
      new Uri(ServiceConstants.RETURN_URL)); 

     auth.Completed += 
      (sender, eventArgs) => 
      { 
       tcs.SetResult(eventArgs.IsAuthenticated ? eventArgs.Account.Properties : null); 
      }; 

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

     Application.Context.StartActivity(intent); 

     return tcs.Task; 
    } 

    private string GetAuthorizeUrl() 
    { 
     var requestUriStringBuilder = new StringBuilder(); 
     requestUriStringBuilder.Append(ServiceConstants.AUTHENTICATION_URL); 
     requestUriStringBuilder.AppendFormat("?{0}={1}", ServiceConstants.REDIRECT_URI, 
      ServiceConstants.RETURN_URL); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", ServiceConstants.CLIENT_ID, 
      ServiceConstants.MSA_CLIENT_ID); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", ServiceConstants.SCOPE, 
      WebUtility.UrlEncode(string.Join(" ", ServiceConstants.Scopes))); 
     requestUriStringBuilder.AppendFormat("&{0}={1}", ServiceConstants.RESPONSE_TYPE, ServiceConstants.CODE); 

     return requestUriStringBuilder.ToString(); 
    } 

承認URIは次のとおりです。

access_token: "EwAIA..." 
token_type: "bearer" 
expires_in: "3600" 
scope: "onedrive.readwrite wl.offline_access wl.signin wl.basic wl.skydrive wl.skydrive_update onedrive.readonly" 
user_id: "41...." 
state: "ykjfmttehzjebqtp" 

I:

https://login.live.com/oauth20_authorize.srf?redirect_uri=https://login.live.com/oauth20_desktop.srf&client_id=["id"]&scope=onedrive.readwrite+wl.offline_access+wl.signin&response_type=code 

私が得る応答は、6つの要素が含まれていますドキュメンテーション(https://dev.onedrive.com/auth/msa_oauth.htm)で確認してください。私はここで何が間違っているかはわかりません。何か案は?

答えて

0

私は間違ったコンストラクタを呼び出しました。これは動作します。これらの定数で

 authenticator = new OAuth2Authenticator(ServiceConstants.MSA_CLIENT_ID, 
      ServiceConstants.MSA_CLIENT_SECRET, 
      string.Join(",", ServiceConstants.Scopes), 
      new Uri(ServiceConstants.AUTHENTICATION_URL), 
      new Uri(ServiceConstants.RETURN_URL), 
      new Uri(ServiceConstants.TOKEN_URL)); 

: スコープ= { "onedrive.readwrite"、 "wl.offline_access"、 "wl.signin"}。

RETURN_URL = "https://login.live.com/oauth20_desktop.srf"; 

    AUTHENTICATION_URL = "https://login.live.com/oauth20_authorize.srf"; 

    TOKEN_URL = "https://login.live.com/oauth20_token.srf"; 
関連する問題