2012-06-13 78 views
1

如何使用DotNetOpenAuthDotNetOpenAuth和Hotmail登录

检索的Hotmail的登入电子邮件ID我试图从样品此代码它给人的名字,而不是电子邮件ID

IAuthorizationState authorization = client1.ProcessUserAuthorization(null); 
    if (authorization == null) 
    { 
     // Kick off authorization request 
     client1.RequestUserAuthorization(new[] { WindowsLiveClient.Scopes.Basic, "wl.emails" }, new Uri("http://localhost/SignIn.aspx")); // this scope isn't even required just to log in 
    } 
    else 
    { 
     var request = WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + Uri.EscapeDataString(authorization.AccessToken)); 
     using (var response = request.GetResponse()) 
     { 
      using (var responseStream = response.GetResponseStream()) 
      { 
       var graph = WindowsLiveGraph.Deserialize(responseStream); 
       //this.nameLabel.Text = HttpUtility.HtmlEncode(graph.Name); 
      } 
     } 
    } 

回答

1

您需要添加别的东西塞进所述Scope

/// <summary> 
/// Well-known scopes defined by the Windows Live service. 
/// </summary> 
/// <remarks> 
/// This sample includes just a few scopes. For a complete list of scopes please refer to: 
/// http://msdn.microsoft.com/en-us/library/hh243646.aspx 
/// </remarks> 
public static class Scopes 
{ 
    /// <summary> 
    /// The ability of an app to read and update a user's info at any time. Without this scope, an app can access the user's info only while the user is signed in to Live Connect and is using your app. 
    /// </summary> 
    public const string OfflineAccess = "wl.offline_access"; 

    /// <summary> 
    /// Single sign-in behavior. With single sign-in, users who are already signed in to Live Connect are also signed in to your website. 
    /// </summary> 
    public const string SignIn = "wl.signin"; 

    /// <summary> 
    /// Read access to a user's basic profile info. Also enables read access to a user's list of contacts. 
    /// </summary> 
    public const string Basic = "wl.basic"; 

    /// <summary> 
    /// Read access to a user's personal, preferred, and business email addresses. 
    /// </summary> 
    public const string Email = "wl.emails"; 
} 

然后,可以使用下面的代码传递正确的范围(S) - 你可以从例子中看到的可以用两种或米通矿石范围。你可以找到here提供的示波器的细节。

var windowsiveClient = WindowsLiveClient.Instance(); 

var authorization = windowsiveClient.ProcessUserAuthorization(); 
if (authorization == null) 
{ 
    // Kick off authorization request 
    windowsiveClient.RequestUserAuthorization(scope: new[] { WindowsLiveClient.Scopes.Email, WindowsLiveClient.Scopes.Basic }); 

    // retuning null will force the page to redirect to Windows Live and as we have not specified a callback if authorized will 
    // return back to the calling URL - in this instance the 'AttemptSignInForWindowLiveOpenId' controller action. 
    return null; // 
} 

WindowsLiveGraph windowsLiveModel; 

var windowsLiveRequest = WebRequest.Create(string.Format("https://apis.live.net/v5.0/me?access_token={0}", Uri.EscapeDataString(authorization.AccessToken))); 
using (var response = windowsLiveRequest.GetResponse()) 
{ 
    using (var responseStream = response.GetResponseStream()) 
    { 
     windowsLiveModel = WindowsLiveGraph.Deserialize(responseStream); 
    } 
}