Использование App Center Auth и Azure B2C для аутентификации с помощью функций Azure - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать поток аутентификации 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.

...