2013-02-25 2 views
4

Я пытаюсь интегрировать аутентификацию oauth из проекта MVC 4 в Microsoft (служба Live). Далее следуют строки в AuthConfig.cs были раскомментирована:Запросить электронную почту от OAuthWebSecurity.RegisterMicrosoftClient

OAuthWebSecurity.RegisterMicrosoftClient(
      clientId: "XXX", 
      clientSecret: "XXX"); 

И, приложение было создано на https://manage.dev.live.com

Позже, когда OAuthWebSecurity.VerifyAuthentication называется, я получаю обратно статус успеха, но поле электронной почты не находится в возвращенных данных.

Как я могу запросить электронное письмо, которое будет возвращено из VerifyAuthentication, которое вызывается снова в учетной записи Microsoft?

Спасибо.

+0

У меня такая же проблема. –

+2

Посмотрите здесь 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

ответ

0

Во-первых, вы должны реализовать класс 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);

Смежные вопросы