Использование Identity Server в приложении Xamarin - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь заставить приложение Xamarin работать с сервером идентификации. Я следовал за этими шагами:

1) Скачать это: https://github.com/IdentityModel/IdentityModel.OidcClient.Samples/tree/master/XamarinForms 2) Запустите приложение Xamarin Forms из пункта 1. Это работает, как и ожидалось, то есть я могу войти как Боб, и я аутентифицирован на общедоступном демонстрационном приложении: https://demo.identityserver.io

Это работает, как и ожидалось до здесь.

3) Затем я загружаю общедоступное демонстрационное приложение здесь: https://github.com/IdentityServer/IdentityServer4.Demo. Добавьте его в решение Xamarin. 4) в раствор; выполните поиск и замену - от https://demo.identityserver.io до http://localhost:24997/ (это URL-адрес моего сервера идентификации внутри решения).

5) Закомментируйте следующие строки кода, поскольку я не использую Azure:

//Startup.cs
 //.AddGoogle("Google", options =>
                //{
                //    options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

                //    options.ClientId = Configuration["Secret:GoogleClientId"];
                //    options.ClientSecret = Configuration["Secret:GoogleClientSecret"];
                //})
                //.AddOpenIdConnect("aad", "Sign-in with Azure AD", options =>
                //{
                //    options.Authority = "https://login.microsoftonline.com/common";
                //    options.ClientId = "https://leastprivilegelabs.onmicrosoft.com/38196330-e766-4051-ad10-14596c7e97d3";

                //    options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                //    options.SignOutScheme = IdentityServerConstants.SignoutScheme;

                //    options.ResponseType = "id_token";
                //    options.CallbackPath = "/signin-aad";
                //    options.SignedOutCallbackPath = "/signout-callback-aad";
                //    options.RemoteSignOutPath = "/signout-aad";

                //    options.TokenValidationParameters = new TokenValidationParameters
                //    {
                //        ValidateIssuer = false,
                //        ValidAudience = "165b99fd-195f-4d93-a111-3e679246e6a9",

                //        NameClaimType = "name",
                //        RoleClaimType = "role"
                //    };
                //})

//Program.cs
//.ConfigureAppConfiguration((ctx, builder) =>
//{
//    var config = builder.Build();
//    var tokenProvider = new AzureServiceTokenProvider();
//    var kvClient = new KeyVaultClient((authority, resource, scope) => tokenProvider.KeyVaultTokenCallback(authority, resource, scope));
//    builder.AddAzureKeyVault(config["KeyVault:BaseUrl"], kvClient, new DefaultKeyVaultSecretManager());
//})

6) Добавить options.RequireHttpsMetadata = false; в IdentityServer.Startup.

Затем я запускаю приложение Xamarin и сервер удостоверений. Я вижу ошибку в следующей строке внутри приложения Xamarin (первая строка: MainPage.Login_Clicked):

_result = await _client.LoginAsync(new LoginRequest());

Ошибка: Error connecting to http://localhost:24997/.well-known/openid-configuration

Есть что-нибудь очевидное, что я делаю не так?

1 Ответ

0 голосов
/ 07 июля 2019

Если вы хотите проверить это на нескольких устройствах, вы не можете использовать localhost.Вы должны будете иметь оба устройства в одной сети и использовать вместо этого локальный IP-адрес.

Для приложения IdSrv вам необходимо правильно настроить URL-адрес хостинга, например, изменив launchSettings.json, если вы разрабатываетелокально или установкой переменной окружения ASPNETCORE_URL.Когда вы запускаете серверное приложение, оно должно сообщать вам, что оно прослушивает http://192.168.1.101:5000 или любой другой локальный IP-адрес и выбранный порт.

Затем вам нужно будет настроить его в качестве URL-адреса полномочий в вашемПриложение Xamarin.Затем приложение может получить доступ к серверу идентификации и правильно с ним связаться.

Если аутентификация не работает, журналы регистрации сервера с сервера идентификации должны дать вам дополнительную информацию о том, что происходит не так.Таким образом, вы можете настроить параметры клиента на сервере идентификации и параметры аутентификации в приложении Xamarin, пока все не будет работать.

...