У меня есть приложение ASP.NET MVC с фреймворком 4.7.2. Приложение настроено на использование IdentityServer3 с помощью OpenIDConnect. Когда пользователь нажимает кнопку «Выход», вызывается следующий код
Метод действия Сначала вызывается метод действия выхода из системы.
[HttpPost]
public ActionResult Logout()
{
Session.Clear();
if (Request.IsAuthenticated)
{
Request.GetOwinContext().Authentication.SignOut();
}
return Redirect("/");
}
В Owin Startup.cs
я настроил OpenIDConnect. Далее срабатывает событие RedirectToIdentityProvider
. Здесь я устанавливаю IdTokenHint
, когда RequestType имеет значение Logout.
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var cookieOptions = new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
LoginPath = new Microsoft.Owin.PathString("/Home"),
SlidingExpiration = true,
ExpireTimeSpan = GetCookieExpiration()
};
var openIdOptions = new OpenIdConnectAuthenticationOptions
{
Authority = ConfigurationManager.AppSettings["id:Authority"],
Scope = "openid email profile",
ClientId = "My ClientId",
RedirectUri = "http://localhost:58641/Home",
ResponseType = "id_token",
SignInAsAuthenticationType = "Cookies",
UseTokenLifetime = false,
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = (context) =>
{
//code here removed for brevity
return Task.FromResult(0);
},
RedirectToIdentityProvider = (context) =>
{
if (context.ProtocolMessage.RequestType == Microsoft.IdentityModel.Protocols.OpenIdConnectRequestType.LogoutRequest)
{
var idTokenHint = context.OwinContext.Authentication.User.FindFirst("id_token").Value;
context.ProtocolMessage.IdTokenHint = idTokenHint;
}
return Task.FromResult(0);
}
}
};
app.UseCookieAuthentication(cookieOptions);
app.UseOpenIdConnectAuthentication(openIdOptions);
MvcHandler.DisableMvcResponseHeader = true;
}
Я скрипач, я вижу, что он звонит
/identity/connect/endsession?id_token_hint= xxxxxxxx
Однако используется HTTP-глагол OPTIONS
. Итак, IdentityServer выдает ошибку The requested resource does not support http method 'OPTIONS'
Не уверен, что мне здесь не хватает.
Изменить 1
В консоли браузера я вижу следующую ошибку
Доступ к XMLHttpRequest по адресу «https://localhost:44300/identity/connect/endsession?id_token_hint=xxxxxxx» (перенаправлен с «http://localhost:58641/account/logout») из источника «http://localhost:58641». ' был заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку управления доступом: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin".
Изменить 2
У меня есть другое приложение ASP.NET с таким же кодом выхода. Но он делает GET
запрос на завершение сеанса.
OPTIONS
. - person LP13   schedule 26.07.2020