Когда я закодировал свою функцию Azure с использованием v1, я смог получить доступ к sid
пользователя следующим образом:
public static bool TryGetUserId(out string userId)
{
userId = string.Empty;
IPrincipal currentPrincipal = ClaimsPrincipal.Current;
if (currentPrincipal is null)
return false;
userId = currentPrincipal.GetNameIdentifier();
return false == string.IsNullOrWhiteSpace(userId);
}
Затем я переместил свою функцию Azure в предварительный просмотр v2 и прочитал, что ClaimsPrincipal больше не гидратировался .Я закончил, используя следующий алгоритм:
public static bool TryGetUserId(HttpRequestMessage request, out string userId)
{
userId = string.Empty;
KeyValuePair<string, IEnumerable<string>> principalId = request.Headers.FirstOrDefault(header => string.Equals(header.Key, "X-MS-CLIENT-PRINCIPAL-ID", StringComparison.InvariantCulture));
if (principalId.Value.Count() != 1)
return false;
userId = principalId.Value.First();
return false == string.IsNullOrWhiteSpace(userId);
}
Вот пример моей функции Azure:
[FunctionName("FindAccount")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestMessage request, ILogger logger)
{
try
{
if (false == FunctionHelper.TryGetUserId(request, out userId))
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
// Looks for an account matching the sid.
}
catch (AccountNotFoundException)
{
logger.LogInformation($"No account has been found for user.");
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
Она больше не работает, так как заголовок больше не является sid, но либоlong
или int
значение, использую ли я учетную запись Google или учетную запись Microsoft.
Настройка
У меня есть приложение для iOS, которое направляет пользователя налибо Google или Microsoft для аутентификации, а затем приложение iOS подключает функцию Azure к определенным конечным точкам (/.auth/login/microsoftaccount
или /.auth/login/google
) для отправки полученных токенов, как описано в документации Microsoft .
Вопрос
Как функция Azure v2 может получить доступ к sid
?
пользователя