didn’t take long to figure out, but just in case. If you are using DotNetOpenAuth and are using the ApplicationBlock.WindowsLiveGraph to get the identity of the user, you will not get the email address of the user. You can how ever request it, by sending wl.emails in the Scope:
Dim WindowsLiveIDTokenManager As New SQLTokenManager(WindowsLiveIDConsumerKey, WindowsLiveIDConsumerSecret)
Dim WindowsLiveClient As New DotNetOpenAuth.ApplicationBlock.WindowsLiveClient() With { _
.ClientIdentifier = WindowsLiveIDConsumerKey, _
.ClientSecret = WindowsLiveIDConsumerSecret _
}
Dim authUrl = New Uri(Request.Url.Scheme + "://" + Request.Url.Authority + "/sts2/login.aspx")
WindowsLiveClient.RequestUserAuthorization(scope:=New String() {ApplicationBlock.WindowsLiveClient.Scopes.Basic, "wl.emails"}, returnTo:=authUrl)
Next, when validating the access token, don’t use the built in JSON Deserialize function, but use your own
If authorization IsNot Nothing Then
Dim request = System.Net.WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + Uri.EscapeDataString(authorization.AccessToken))
Using response = request.GetResponse()
Dim JSON As String = ""
Using responseStream = response.GetResponseStream()
Dim reader As New IO.StreamReader(responseStream, Encoding.UTF8)
JSON = reader.ReadToEnd()
End Using
Dim jss As New Script.Serialization.JavaScriptSerializer
Dim LiveIDUser As LiveIDGraph = jss.Deserialize(JSON, GetType(LiveIDGraph)) End Using
End If
And this is how your LiveIDGraph would look like
Imports System.Runtime.Serialization
<DataContract(Namespace:="")>
Public Class LiveIDGraph
<DataMember> Public id As String
<DataMember> Public name As String
<DataMember> Public first_name As String
<DataMember> Public last_name As String
<DataMember> Public link As String
<DataMember> Public gender As String
<DataMember> Public emails As LiveIDEmails
<DataMember> Public locale As String
<DataMember> Public updated_time As DateTime
End Class
<DataContract(Namespace:="")>
Public Class LiveIDEmails
<DataMember> Public preferred As String
<DataMember> Public account As String
<DataMember> Public personal As String
<DataMember> Public business As String
End Class
Ingen kommentarer:
Send en kommentar