У меня есть приложение do tnet core, которое использует пакет Sustainsys Saml2 для аутентификации. Доступ к приложению работает нормально, если выполняется через браузер. Пользователь запрашивает приложение, и если он не аутентифицирован, он перенаправляется на страницу входа в федерацию. После входа они возвращаются в приложение. В приложении есть API, к которому я хотел бы получить доступ через PowerShell, но у меня возникают проблемы с входом в приложение после аутентификации. У моего IdP есть API, который я могу вызвать с помощью Invoke-RestMethod
, который возвращает файлы cookie аутентификации, и я сохраняю их в переменной сеанса как часть команды. Затем я бы сделал еще один Invoke-RestMethod
в своем API с включенным сеансом. Проблема в том, что мое приложение не видит, что мой сеанс аутентифицирован, и перенаправляет меня обратно на страницу входа в федерацию, где видит, что я аутентифицирован, и отправляет меня обратно в приложение, и цикл повторяется.
Заголовок местоположения при перенаправлении - https://..../error?access_denied
, который, я думаю, устанавливается, когда приложение пытается вызвать await AuthenticationManager.GetExternalLoginInfoAsync()
. В моем вызове .addSaml2(...
в Startup я устанавливаю для AllowUnsoliciedAuthnResponse
значение true в параметрах Identity Provider. Есть ли какая-то другая конфигурация, которую нужно выполнить в приложении, или что-то другое в моей команде PowerShell для аутентификации в приложении?
Startup.cs
services.addAuthentication(sharedOptions => {
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = Saml2Defaults.Scheme;
sharedOptions.DefaultForbinScheme = CookieAuthenticationDefaults.AuthenticationScheme;
powershell commands
> invoke-restmethod -Uri "<idp api url>" -SessionVariable login -CertificateThumbprint $cert.thumbprint -Method Post -Body @body
> invoke-restmethod -Uri "<app url>" -WebSession $login -Method Get