C# openid-реализация подключения сервера и клиента с .NET Core 5 , (MSAL?) и клавиатурным замком

#c# #asp.net-core #asp.net-web-api #.net-core #asp.net-core-webapi

Вопрос:

Этот вопрос уже задавался раньше, но прошло достаточно времени, и я чувствую, что его уместно задать снова, так как предыдущие ответы были .NET 2.

У меня есть недавняя установка программы установки и работы с ключами, обеспечивающая единый вход в систему с несколькими приложениями. Теперь по реальной причине был настроен маскировочный ключ, чтобы использовать его при разработке и доступе к веб-папкам. Я работаю над тем, чтобы отказаться от использования ADAL и MS ADFS на prem и перейти на MSAL и маскировку ключей.

Основываясь на предыдущих ответах, на стороне сервера я установил Microsoft.AspNetCore.Идентификация.Пакет OpenIdConnect NuGet (после отказа от попыток получить Microsoft.AspNetCore.Идентификация.JwtBearer для работы) и клиентская сторона пытались использовать MSAL. (Я не зациклился на этих технологиях, только на том, что я нашел до сих пор, если мне следует использовать что-то другое, пожалуйста, скажите об этом.)

Текущая попытка на стороне сервера: Внутри Startup.cs, внутри общедоступных служб конфигурации void(службы IServiceCollection)

             services.AddAuthentication(options =>
            {
                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddOpenIdConnect(options =>
            {
                options.Authority = "https://keycloak.mydomain.net/auth/realms/myrealm/";
                options.ClientId = "client_id";
                options.ClientSecret = "client_secret";
                options.RequireHttpsMetadata = true;
                options.ResponseType = "code";
                options.SaveTokens = true;
                options.Scope.Add("openid");
                options.Scope.Add("profile");
            });
 

Текущая попытка на стороне клиента:

             IPublicClientApplication app = PublicClientApplicationBuilder.Create(ClientID)
                    .WithRedirectUri(RedirectUri)
                    //.WithExtraQueryParameters(new Dictionary<string, string> { { "resource", HttpUtility.UrlEncode(RedirectUri) } })
                    .Build();

            //IPublicClientApplication app = builder.Build();
            IEnumerable<IAccount> accounts = await app.GetAccountsAsync();

            //string[] scopes = new string[] { "openid", "profile", "allatclaims" };
            string[] scopes = new string[] { "openid", "profile" }; //, "offline_access" };
            Microsoft.Identity.Client.AuthenticationResult result = null;
            try
            {
                result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
                        //.WithExtraQueryParameters(new Dictionary<string, string> { { "resource", HttpUtility.UrlEncode(RedirectUri) } })
                        .ExecuteAsync();
            }
            catch (MsalUiRequiredException ex_a)
            {
                Debug.WriteLine("(1a) msal: "   ex_a.Message  ", code: "  ex_a.ErrorCode);

                try
                {
                    result = await app.AcquireTokenInteractive(scopes)
                            //.WithExtraQueryParameters(new Dictionary<string, string> { { "resource", HttpUtility.UrlEncode(RedirectUri) } })
                            .ExecuteAsync();
                }
                catch (Exception e)
                {
                    Debug.WriteLine("(1b) msal: "   e.Message  ", code: "  e.HResult);
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("(2) msal: "   e.Message  ", code: "  e.HResult);
            }
 

Ищу пример правильного способа сделать это или исправление для кода, который у меня сейчас есть.

Ошибка, которую я не смог преодолеть, — это AADSTS50049. Может ли быть так, что MSAL будет поддерживать только prem ms adfs и azure по дизайну?

Комментарии:

1. Возможно, я что-то упускаю, но я не понимаю, в чем заключается ваш настоящий вопрос?

2. Я ищу пример того, как это сделать, или помощь с кодом, который у меня сейчас есть.

3. для webapi, как правило, вы добавляете учетную запись службы, чтобы вы могли проходить аутентификацию без веб-интерфейса. Если это веб-сайт, просто перезванивающий через api, то нормальная аутентификация должна быть в порядке

4. В этом случае у меня есть мобильное приложение и настольное приложение, которые взаимодействуют с webapi и должны быть идентифицированы с помощью webapi. Дело в том, что у меня все это работало с prem adfs и ADAL, переход на .net core 5 означал, что мне нужно было переключиться на MSAL, но MSAL не работал с prem adfs (ошибка зарегистрирована и подтверждена ms), поэтому я установил keycloak и работаю над переключением на keycloak, не зная, как установить значения или какой пакет nuget я должен использовать. Не найти хорошего примера в сети. Лучшее, что я нашел, было с ним . чистая версия 2.