0

Мне нужно получить адрес электронной почты после аутентификации пользователя.
Я попытался обрезать эту информацию в authenticationResult, но я просто нашел имя пользователя .. но не письмо.
Как я могу получить эту информацию?получить адрес электронной почты пользователя после аутентификации Azure AD в приложении xamarin

Благодаря

ответ

1

вы хотите электронной почты на стороне клиента или на стороне сервера ли? Если это серверная сторона, попробуйте проверить значение HTTP-заголовка x-ms-client-main-name. Если это клиентская сторона, попробуйте сделать аутентифицированный запрос /.auth/me, и вы должны увидеть все претензии, включая электронную почту пользователя в ответе JSON.

+0

да это ХТ на стороне клиента – Stephane

+0

я пытаюсь этот код, но нет результата клиент – Stephane

+0

вар. = new HttpClient(); var request = new HttpRequestMessage (HttpMethod.Get, CloudConstants.ApIbaseUrl + "/.auth/me); try {var response = client.SendAsync (request); if (response.Result.IsSuccessStatusCode) { var responseString = response.Result.Content.ReadAsStringAsync(); var profile = JArray.Pars е (responseString.Result); } } catch (Exception ee) – Stephane

1

Поскольку вы упомянули в другом ответе, что это клиентская сторона, используйте метод InvokeApi <>(). Это подробно обсуждается в книге здесь: https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/authorization/#obtaining-user-claims

Короткая версия является этот код:

List<AppServiceIdentity> identities = null; 

public async Task<AppServiceIdentity> GetIdentityAsync() 
{ 
    if (client.CurrentUser == null || client.CurrentUser?.MobileServiceAuthenticationToken == null) 
    { 
     throw new InvalidOperationException("Not Authenticated"); 
    } 

    if (identities == null) 
    { 
     identities = await client.InvokeApiAsync<List<AppServiceIdentity>>("/.auth/me"); 
    } 

    if (identities.Count > 0) 
     return identities[0]; 
    return null; 
} 

Где AppServiceIdentity определяется следующим образом:

public class AppServiceIdentity 
{ 
    [JsonProperty(PropertyName = "id_token")] 
    public string IdToken { get; set; } 

    [JsonProperty(PropertyName = "provider_name")] 
    public string ProviderName { get; set; } 

    [JsonProperty(PropertyName = "user_id")] 
    public string UserId { get; set; } 

    [JsonProperty(PropertyName = "user_claims")] 
    public List<UserClaim> UserClaims { get; set; } 
} 

public class UserClaim 
{ 
    [JsonProperty(PropertyName = "typ")] 
    public string Type { get; set; } 

    [JsonProperty(PropertyName = "val")] 
    public string Value { get; set; } 
} 
0

Я не нахожу InvokeApiAsync к назови это. есть ли токен или что-то в этом роде, чтобы найти письмо?

var client = new HttpClient();

запрос вар = новый HttpRequestMessage (HttpMethod.Get, CloudConstants.ApIbaseUrl + /.auth/me ");

 request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _authenticationResult.Token); 
     try 
     { 
      var response = client.SendAsync(request); 

      if (response.Result.IsSuccessStatusCode) 
      { 
       var responseString = response.Result.Content.ReadAsStringAsync(); 
       var profile = JArray.Parse(responseString.Result); 
      } 
     } 
     catch (Exception ee) 
     { 
      _dialogService.DisplayAlertAsync("An error has occurred", "Exception message: " + ee.Message, "Dismiss"); 
     }