ASP.NET MVC4 OAuth Учетная запись Microsoft (Live) - получение электронных писем пользователей

Я пытаюсь реализовать аутентификацию OAuth с помощью Microsoft ID для моего веб-сайта ASP.NET MVC4. Пока что вход в систему с учетной записью Microsoft работает. Но мне нужно получить дополнительные пользовательские данные (в частности, учетную запись пользователя или предпочитаемый адрес электронной почты).

Я использую live.domains в качестве почтового сервиса. Поэтому я создал электронные письма для моих пользователей с моим доменом. Теперь я хочу, чтобы эти пользователи могли войти на сайт, используя свои учетные записи электронной почты (с помощью OAuth).

Примечание: мой веб-сервер не поддерживает asp.net 4.5, поэтому я застрял на 4.0 и не могу использовать LiveSDK для ASP.NET (насколько я знаю)...

Идея примерно такая:

  • использовать встроенную функцию OAuth для входа в систему
  • получить адрес электронной почты своего аккаунта и проверить, является ли это письмо от моего домена
  • если это не из моего домена, откажитесь от регистрации
  • если письмо пришло с моего домена, разрешите пользователю зарегистрироваться и продолжить работу как обычно

Я создал пользовательский Microsoft OAuth2Client, используя по умолчанию в качестве ссылки (клиенты по умолчанию можно найти на github), и указал необходимые области (wl.basic, wl.signin, wl.emails). Остальная часть кода почти такая же.

public MyMicrosoftClient(string appId, string appSecret)
    : this(appId, appSecret, new string[] {"wl.basic", "wl.signin", "wl.emails"})
{
}

Функция GetUserData используется для получения дополнительных пользовательских данных (таких как имя, пол), и это работает. Код от клиента по умолчанию:

protected override IDictionary<string, string> GetUserData(string accessToken)
{
    MicrosoftClientUserData graph;
    var request =
        WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + CustomHelpers.EscapeUriDataStringRfc3986(accessToken));
using (var response = request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        graph = JsonHelper.Deserialize<MicrosoftClientUserData>(responseStream);
    }
}

var userData = new Dictionary<string, string>();
userData.Add("id", graph.Id == "" ? null : graph.Id);
userData.Add("username", graph.Name == "" ? null : graph.Name);
userData.Add("name", graph.Name == "" ? null : graph.Name);
userData.Add("link", graph.Link == null ? null : graph.Link.AbsoluteUri);
userData.Add("gender", graph.Gender == "" ? null : graph.Gender);
userData.Add("firstname", graph.FirstName == "" ? null : graph.FirstName);
userData.Add("lastname", graph.LastName == "" ? null : graph.LastName);

return userData;

}

Насколько я понимаю, он получает все запрошенные пользовательские данные (на основе указанных областей), поэтому он также должен содержать электронные письма в ответе. К сожалению, даже если это произойдет, я понятия не имею, как получить эту информацию из потока ответов...

Итак, как бы я прочитал письма из ответа (если я на правильном пути вообще)?

0 ответов

Другие вопросы по тегам