У меня есть интерфейсное приложение (JavaScript), которое использует серверную часть C# .NET. Аутентификация реализована через OAuth (Oracle IDCS). Все работало нормально, но теперь серверное приложение находится за шлюзом API/WAF (доступным через Интернет). Допустим, публичный хост — public-host.com. Шлюз транслирует общедоступный адрес на локальный хост, на котором мое серверное приложение получает запросы (поэтому мой сервер «думает», что он размещен под другим URL-адресом, чем на самом деле). Допустим, частный хост — Private-host.io. Теперь серверная часть использует неверный параметр OAuth redirect_uri при вызове Oracle (https://idcs-xxx.identity.oraclecloud.c ... e/callback&... — пример без кодировки URL). Публично это https, но локально/внутренне это http.
Я попытался это исправить:
services
.AddAuthentication(options =>
{
/*...*/
})
.AddOAuth("Oracle", options =>
{
options.Events = new OAuthEvents
{
OnRedirectToAuthorizationEndpoint = context =>
{
// Replace the `redirect_uri` query string parameter found in `context.RedirectUri` with the public one
// so replace "http://internal-host.io/" with "https://public-host.com/" when redirecting to Oracles OAuth endpoint
// context.RedirectUri holds the full redirect URL like: https://idcs-xxx.identity.oraclecloud.c ... e/callback
// this is more of a pseudo-code because we have to deal with encoding the URL/query string
context.RedirectUri = context.RedirectUri.Replace("http://internal-host.io/", "https://public-host.com/");
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
}
};
});
Теперь при отправке запроса OAuth используется правильный параметр redirect_uri, аутентификация в Oracle проходит успешно (я думаю) и Oracle перенаправляет обратно на правильный адрес (https://public-host.com/authorization-c ... k?code=XXX но теперь код C# выдает две ошибки:
An error was encountered while handling the remote login. Correlation failed.
Microsoft.AspNetCore.Authentication.AuthenticationFailureException:
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1+d__12.MoveNext (Microsoft.AspNetCore.Authentication, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
и
Microsoft.AspNetCore.Authentication.AuthenticationFailureException: An error was encountered while handling the remote login.
---> Microsoft.AspNetCore.Authentication.AuthenticationFailureException: OAuth token endpoint failure: invalid_redirect_uri;Description=Client XXXX requested an invalid redirect URL: http://internal-host.io:443/authorization-code/callback.
(обратите внимание на http://internal-host.io)
Поэтому я подозреваю, что, несмотря на то, что я изменил redirect_uri в OnRedirectToAuthorizationEndpoint код обработки OAuth каким-то образом ожидает local-host.io вместо public-host.com и терпит неудачу, потому что это что-то другое...
< hr />
Еще несколько настроек:
services.AddAuthentication(options => {...})
.AddOAuth("Oracle", options =>
{
Uri apiAddress = configuration.OracleApiAddress;
options.AuthorizationEndpoint = $"{apiAddress}/oauth2/v1/authorize";
options.Scope.Add("openid");
options.Scope.Add("urn:opc:idm:__myscopes__");
options.CallbackPath = new PathString("/authorization-code/callback");
options.ClientId = configuration.OracleApplicationId;
options.ClientSecret = configuration.OracleApplicationSecret;
options.TokenEndpoint = $"{apiAddress}/oauth2/v1/token";
options.UserInformationEndpoint = $"{apiAddress}/oauth2/v1/userinfo";
// ...
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -waf-gatew
Проблемы с аутентификацией ASP.NET Core через Oracle Oauth, когда сайт находится за WAF/шлюзом. ⇐ C#
Место общения программистов C#
1731069483
Anonymous
У меня есть интерфейсное приложение (JavaScript), которое использует серверную часть C# .NET. Аутентификация реализована через OAuth (Oracle IDCS). Все работало нормально, но теперь серверное приложение находится за шлюзом API/WAF (доступным через Интернет). Допустим, публичный хост — public-host.com. Шлюз транслирует общедоступный адрес на локальный хост, на котором мое серверное приложение получает запросы (поэтому мой сервер «думает», что он размещен под другим URL-адресом, чем на самом деле). Допустим, частный хост — Private-host.io. Теперь серверная часть использует неверный параметр OAuth redirect_uri при вызове Oracle (https://idcs-xxx.identity.oraclecloud.com/oauth2/v1/authorize?client_id=...&scope=...&...&redirect_uri=http://private-host.io/authorization_code/callback&... — пример без кодировки URL). Публично это https, но локально/внутренне это http.
Я попытался это исправить:
services
.AddAuthentication(options =>
{
/*...*/
})
.AddOAuth("Oracle", options =>
{
options.Events = new OAuthEvents
{
OnRedirectToAuthorizationEndpoint = context =>
{
// Replace the `redirect_uri` query string parameter found in `context.RedirectUri` with the public one
// so replace "http://internal-host.io/" with "https://public-host.com/" when redirecting to Oracles OAuth endpoint
// context.RedirectUri holds the full redirect URL like: https://idcs-xxx.identity.oraclecloud.com/oauth2/v1/authorize?client_id=...&scope=...&...&redirect_uri=http://internal-host.io/authorization_code/callback
// this is more of a pseudo-code because we have to deal with encoding the URL/query string
context.RedirectUri = context.RedirectUri.Replace("http://internal-host.io/", "https://public-host.com/");
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
}
};
});
Теперь при отправке запроса OAuth используется правильный параметр redirect_uri, аутентификация в Oracle проходит успешно (я думаю) и Oracle перенаправляет обратно на правильный адрес (https://public-host.com/authorization-code/callback?code=XXX но теперь код C# выдает [b]две ошибки[/b]:
An error was encountered while handling the remote login. Correlation failed.
Microsoft.AspNetCore.Authentication.AuthenticationFailureException:
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1+d__12.MoveNext (Microsoft.AspNetCore.Authentication, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
и
Microsoft.AspNetCore.Authentication.AuthenticationFailureException: An error was encountered while handling the remote login.
---> Microsoft.AspNetCore.Authentication.AuthenticationFailureException: OAuth token endpoint failure: invalid_redirect_uri;Description=Client XXXX requested an invalid redirect URL: http://internal-host.io:443/authorization-code/callback.
(обратите внимание на http://internal-host.io)
Поэтому я подозреваю, что, несмотря на то, что я изменил redirect_uri в OnRedirectToAuthorizationEndpoint код обработки OAuth каким-то образом ожидает local-host.io вместо public-host.com и терпит неудачу, потому что это что-то другое...
< hr />
Еще несколько настроек:
services.AddAuthentication(options => {...})
.AddOAuth("Oracle", options =>
{
Uri apiAddress = configuration.OracleApiAddress;
options.AuthorizationEndpoint = $"{apiAddress}/oauth2/v1/authorize";
options.Scope.Add("openid");
options.Scope.Add("urn:opc:idm:__myscopes__");
options.CallbackPath = new PathString("/authorization-code/callback");
options.ClientId = configuration.OracleApplicationId;
options.ClientSecret = configuration.OracleApplicationSecret;
options.TokenEndpoint = $"{apiAddress}/oauth2/v1/token";
options.UserInformationEndpoint = $"{apiAddress}/oauth2/v1/userinfo";
// ...
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79152972/issues-authenticating-asp-net-core-via-oracle-oauth-when-site-is-behid-waf-gatew[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия