Я столкнулся с проблемами аутентификации OpenID Connect в моем приложении .NET Core после его развертывания в AWS EKS. Аутентификация работает правильно локально, но не выполняется при развертывании. Вот подробности настройки и проблемы, с которыми я столкнулся:
Настройка:
.NET Core версия: .NET 6
Аутентификация: OpenID Connect с OAM
Среда развертывания: AWS EKS
Redirecturl: https://admin.aws.xxx.com/test
Путь обратного вызова:/
Я пробовал изменить путь обратного вызова к /test вместо /, но я перенаправляюсь на домашнюю страницу, но на самом деле не проходит поток аутентификации.
Соответствующий код:
#region Аутентификация
Я столкнулся с проблемами аутентификации OpenID Connect в моем приложении .NET Core после его развертывания в AWS EKS. Аутентификация работает правильно локально, но не выполняется при развертывании. Вот подробности настройки и проблемы, с которыми я столкнулся: Настройка: .NET Core версия: .NET 6 Аутентификация: OpenID Connect с OAM Среда развертывания: AWS EKS Redirecturl: https://admin.aws.xxx.com/test Путь обратного вызова:/ Я пробовал изменить путь обратного вызова к /test вместо /, но я перенаправляюсь на домашнюю страницу, но на самом деле не проходит поток аутентификации. Соответствующий код: #region Аутентификация [code]builder.Services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie(options => { options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromHours(1); options.Cookie.SameSite = SameSiteMode.None; options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add("X-OAUTH-IDENTITY-DOMAIN-NAME", configuration.GetValue("Authentication:OAM:DomainName")); string codeVerifier = context.TokenEndpointRequest.Parameters.Where(x => x.Key == "code_verifier").FirstOrDefault().Value; var tokenClientOptions = new TokenClientOptions() { ClientId = context.TokenEndpointRequest.ClientId, ClientSecret = context.TokenEndpointRequest.ClientSecret, Address = oamConfiguration.TokenEndpoint, Parameters = { new KeyValuePair("Content-Type", "application/x-www-form-urlencoded") } };
var tokenClient = new TokenClient(httpClient, tokenClientOptions); var tokenResponse = await tokenClient.RequestAuthorizationCodeTokenAsync(context.TokenEndpointRequest.Code, redirectUrl, codeVerifier); if (tokenResponse.HttpStatusCode == System.Net.HttpStatusCode.OK) { context.HandleCodeRedemption(tokenResponse.AccessToken, tokenResponse.IdentityToken); Log.Information("Token response received and handled successfully."); Log.Information("Access Token: {AccessToken},Identity Token: {IdentityToken}", tokenResponse.AccessToken, tokenResponse.IdentityToken); } else { Log.Error("Failed to get response from token endpoint: {TokenResponse}", tokenResponse); throw new Exception($"Unable to get response from token endpoint... {tokenResponse}"); } } catch (Exception ex) { Log.Error(ex, "Exception occurred during authorization code received."); throw new Exception(ex.Message, ex); }
await Task.FromResult(0); }
string GetRedirectURL(IConfiguration configuration, string hostName) { Log.Information("GetRedirectURL called for host: {HostName}", hostName); var redirectUrl = configuration.GetValue("Authentication:OAM:RedirectUrl"); return redirectUrl; }
async Task GetOpenIdConnectConfigurations(IConfiguration configuration) { Log.Information("Getting OpenIdConnect configurations."); try { using var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-OAUTH-IDENTITY-DOMAIN-NAME", configuration.GetValue("Authentication:OAM:DomainName")); var configManager = new ConfigurationManager(configuration.GetValue("Authentication:OAM:MetadataAddress"), new OpenIdConnectConfigurationRetriever(), client); var openIdConnectConfiguration = await configManager.GetConfigurationAsync(); Log.Information("OpenIdConnect configurations retrieved successfully."); return openIdConnectConfiguration; } catch (Exception ex) { Log.Error(ex, "Unable to get configurations from OAM."); throw new Exception($"Unable to get configurations from OAM: {ex}"); } }
Task OnTokenValidated(TokenValidatedContext context) { Log.Information("Token validated successfully."); context.Properties.StoreTokens(new[] { new AuthenticationToken { Name = OpenIdConnectResponseType.IdToken, Value = context.TokenEndpointResponse.IdToken, } });
var claimsIdentity = context.Principal.Identity as ClaimsIdentity; var userIdClaim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); Log.Information("User ID claim: {UserIdClaim}", userIdClaim.Value);