#c# #asp.net-core #jwt #okta
#c# #asp.net-core #jwt #okta
Вопрос:
Я создаю приложение, используя Okta для аутентификации, но запросы API всегда возвращают ошибку 500. Я использую @okta/okta-react
для получения токена доступа, но при отправке заголовка авторизации ( Bearer {accessToken}
) сервер не может его обработать.
Сервер отвечает следующей ошибкой на каждый запрос.
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[3]
Exception occurred while processing message.
System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'System.String'.
---> System.IO.IOException: IDX20807: Unable to retrieve document from: 'System.String'. HttpResponseMessage: 'System.Net.Http.HttpResponseMessage', HttpResponseMessage.Content: 'System.String'.
at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)
at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel)
at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
--- End of inner exception stack trace ---
at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
Я использую Okta.Пакет AspNetCore для конфигурации. Мой класс запуска имеет
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = OktaDefaults.ApiAuthenticationScheme;
options.DefaultChallengeScheme = OktaDefaults.ApiAuthenticationScheme;
options.DefaultSignInScheme = OktaDefaults.ApiAuthenticationScheme;
})
.AddOktaWebApi(new OktaWebApiOptions()
{
OktaDomain = Configuration["Okta:Authority"],
});
services.AddAuthorization();
services.AddControllersWithViews();
...
}
и
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => ...
}
Я много искал ответы, но большинство из них похожи, но не по той же проблеме. Буду признателен за любую помощь!
Комментарии:
1. В вашем
Configure
методе отсутствует вызовapp.UseIdentityServer()
.2. Проблема в том, что я следовал developer.okta.com/docs/guides/protect-your-api/aspnetcore3 /… и нигде там даже не упоминается IdentityServer. Кроме того, необходимо установить дополнительный пакет, который также не был упомянут.
3. Следует быть осторожным с тем, что при использовании промежуточного программного обеспечения важен порядок их объявления. У меня была эта ошибка, потому что я не использовал
app.UseAuthentication();
first, а затемapp.UseAuthorization();
second. Если они расположены в неправильном порядке, вы получите сообщение об ошибке: `System. Исключение InvalidOperationException: IDX20803: не удалось получить конфигурацию из:https://org.oktapreview.com/oauth2/aus17ct73zmZrZjbh0h8/.well-known/openid-configuration'.