Во-первых, вы должны реализовать класс MicrosoftScopedClient, который реализует интерфейс IAuthenticationClient и должен реализовывать два метода интерфейса:
общественного класса MicrosoftScopedClient: IAuthenticationClient { // Определить следующие три ключа в web.config файл и использовать его в коде, он будет поддерживать согласованность кода. private string clientId; private string clientSecret; частный объем строки;
private const string baseUrl = "https://login.live.com/oauth20_authorize.srf";
private const string tokenUrl = "https://login.live.com/oauth20_token.srf";
public void RequestAuthentication(HttpContextBase context, Uri returnUrl)
{
//Getting values of clientId, clientSecret and scope from Web.Config file
clientId=System.Configuration.ConfigurationManager.AppSettings["msClientId"].ToString();
clientSecret=System.Configuration.ConfigurationManager.AppSettings["msClientSecret"].ToString();
scope=System.Configuration.ConfigurationManager.AppSettings["msScope"].ToString();
string url = baseUrl + "?client_id=" + clientId + "&redirect_uri=" + HttpUtility.UrlEncode(returnUrl.ToString()) + "&scope=" + HttpUtility.UrlEncode(scope) + "&response_type=code";
//this will authenticate the user and register(only if user visited first time).
context.Response.Redirect(url);
}
public AuthenticationResult VerifyAuthentication(HttpContextBase context)
{
string code = context.Request.QueryString["code"];
string rawUrl = context.Request.Url.ToString();
//removing code portion
rawUrl = Regex.Replace(rawUrl, "&code=[^&]*", "");
IDictionary<string, string> userData = GetUserData(code, rawUrl);
if (userData == null)
return new AuthenticationResult(false, ProviderName, null, null, null);
string id = userData["id"];
string username = userData["email"]; // here you'll get email id of user
userData.Remove("id");
userData.Remove("email");
AuthenticationResult result = new AuthenticationResult(true, ProviderName, id, username, userData);
return result;
}
}
////// Наконец, вы должны зарегистрировать все питания в AuthConfig.cs и взаимодействовать с Microsoft через наше приложение. OAuthWebSecurity.RegisterClient (новый MicrosoftScopedClient (System.Configuration.ConfigurationManager.AppSettings [ "msClientId"]. ToString(), System.Configuration.ConfigurationManager.AppSettings [ "msClientSecret"]. ToString(), «wl.basic. WL электронные письма " ) ," Microsoft ", null);
У меня такая же проблема. –
Посмотрите здесь http://mvcdiary.com/2013/03/01/how-oauthsecurity-to-obtain-emails-for-different-oauth-clients-but-microsoft-client-doesnt-return-email-it-didnt -include-Scope WL-сообщения электронной почты / – Tobiasz