Не удается отправить запрос на выход на Identity Server из приложения MVC - PullRequest
0 голосов
/ 01 марта 2019

в моем приложении я принимаю аутентификацию в отношении Identity Server.Все работает хорошо, кроме части выхода из системы.На практике, когда я хочу выйти из системы, я ожидаю выхода из системы также с моего сервера идентификации, но этого не происходит, и я выхожу только из своего приложения.Код следующий:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Login.aspx")
});

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

var AuthorityUrl = ConfigurationManager.AppSettings["AuthorityUrl"];

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    Authority = AuthorityUrl,
    RedirectUri = $"{ConfigurationManager.AppSettings["PortalWebUrl"]}/signin-oidc",
    PostLogoutRedirectUri = $"{ConfigurationManager.AppSettings["PortalWebUrl"]}/signout-callback-oidc",
    RequireHttpsMetadata = false,
    ClientId = "portal-local",
    AuthenticationType = "oidc",
    SignInAsAuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    ResponseType = "id_token token",
    Scope = "openid profile email",
    UseTokenLifetime = false,
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        SecurityTokenValidated = n =>
        {
            var claimsToExclude = new[]
            {
                "aud", "iss", "nbf", "exp", "nonce", "iat", "at_hash"
            };

            var claimsToKeep = n.AuthenticationTicket.Identity.Claims.Where(x => !claimsToExclude.Contains(x.Type)).ToList();

            claimsToKeep.Add(new Claim("id_token", n.ProtocolMessage.IdToken));

            var ci = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType, "name", "role");
            ci.AddClaims(claimsToKeep);

            n.AuthenticationTicket = new Microsoft.Owin.Security.AuthenticationTicket(ci, n.AuthenticationTicket.Properties);

            return Task.CompletedTask;
        },
        RedirectToIdentityProvider = n =>
        {
            if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
            {
                n.ProtocolMessage.IdTokenHint = n.OwinContext.Authentication.User.FindFirst("id_token")?.Value;
            }

            return Task.CompletedTask;
        }
    }
});

«Identity Server» возвращает «предупреждение»:

enter image description here

МожетВы помогаете мне понять, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...