2014-11-05 94 views
0

33I发布的回调过程中的如下要求微软以获取校验码,微软的OAuth不返回refresh_token

public ActionResult ConnectMicrosoft() 
{ 
    var ClientId = "xxxxxxxxx"; 
    // var ClientSecret = "xxxxxxxxxxxxxxx"; 
    var RedirectUri = "http://www.domain.com:50952/Settings/MicrosoftAuthCallback"; 
    var MsUrl = String.Format("https://login.live.com/oauth20_authorize.srf?client_id={0}&scope=wl.basic&response_type=code&redirect_uri={1}", ClientId, RedirectUri); 
    return Redirect(MsUrl); 
} 

而这,

public ActionResult MicrosoftAuthCallback(string code) 
{ 
    string result = null; 
    var ClientId = "xxxxxxxxxxxx"; 
    var ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxx"; 
    var RedirectUri = "http://www.domain.com:50952/Settings/MicrosoftAuthCallback"; 
    var FinalUri = String.Format("https://login.live.com/oauth20_token.srf?client_id={0}&client_secret={1}&code={2}&grant_type=authorization_code&redirect_uri={3}", ClientId, ClientSecret, code, RedirectUri); 
    HttpWebRequest _Request = HttpWebRequest.Create(FinalUri) as HttpWebRequest; 
    _Request.Method = "GET"; 
    using (WebResponse _Response = _Request.GetResponse()) 
    { 
     var sr = new StreamReader(_Response.GetResponseStream()); 
     result = sr.ReadToEnd(); 
     sr.Close(); 
    } 
    var _Serializer = new JavaScriptSerializer(); 
    var TokenData = _Serializer.Deserialize<MicrosoftToken>(result); 
    return View(); 
} 

回调方法成功返回的access_token,tokentype和expires_in和authentication_token,但刷新标记丢失。你能给我一个关于我做错了什么的线索吗?

回答

1

呵呵,忘了包含范围,wl.offline_access,还请求必须b POST = ContentType =“application/x-www-form-urlencoded”