Я пытаюсь использовать поток аутентификации AppCenter в моем приложении Xamarin с Azure B2C для аутентификации с помощью функции Azure и получения идентификатора пользователя.
в App.xaml.cs
using System;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using Rooms.Services;
using Rooms.Views;
using Microsoft.AppCenter;
using Microsoft.AppCenter.Auth;
using System.Threading;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;
namespace Rooms
{
public partial class App : Application
{
private HttpClient _client;
private HttpClient Client
{
get
{
return _client ?? new HttpClient();
}
}
public App()
{
InitializeComponent();
}
protected override void OnStart()
{
// Handle when your app starts
AppCenter.Start("ios={Your Xamarin iOS App Secret}" +
"android={app-secret};",
typeof(Auth));
SignIn();
MainPage = new MainPage();
}
async void SignIn()
{
try
{
// Sign-in succeeded.
UserInformation userInfo = await Auth.SignInAsync();
string token = userInfo.AccessToken;
string uri = "https://{function-name}.azurewebsites.net/.auth/me";
string userId = string.Empty;
Client.DefaultRequestHeaders.Add("x-zumo-auth", token);
var response = await Client.GetAsync(uri);
string rs = await response.Content.ReadAsStringAsync();
var rj = JsonConvert.DeserializeObject<JArray>(rs);
userId = rj.Children().FirstOrDefault().Children<JProperty>().FirstOrDefault(x => x.Name == "user_id").Value.ToString();
}
catch (Exception e)
{
// Do something with sign-in failure.
}
}
}
}
возвращает ответ:
{StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Date: Mon, 28 Oct 2019 00:58:08 GMT
WWW-Authenticate: Bearer realm="{function-app-name}.azurewebsites.net" authorization_uri="https://{B2C-tenant}.b2clogin.com/{B2C-tenant}.onmicrosoft.com/oauth2/v2.0/authorize?p={B2C-tenant}"
[....]
}}
Настройки ADD в настройках аутентификации функции Azure:
-Client Secret: совпаденияСекрет приложения в App Center.
-ID клиента: совпадает с идентификатором приложения из регистрации приложения B2C
-Issuer Url: совпадает с URL-адресом конечной точки в моем B2C-входе / регистрации потока пользователя
Функция Azure Настройки Azure Active Directory
Настройки аутентификации в App Center связаны с моим B2C-клиентом и потоком пользователей.
Настройки аутентификации App Center
B2C Зарегистрируйтесь и войдите в политику потока пользователей
Обновление:
Возникла проблема с моим HttpClientсвойство: (
Должно быть так:
return _client = _client ?? new HttpClient();
Вместо of this:
return _client ?? new HttpClient();
Это исправляет проблему 401 не авторизован. Теперь я получаю пустую строку. Я должен получить токен JWT.