2016-07-05 6 views
4

Основная проблема заключается в том, что я не смог найти правильный способ выхода из системы identityServer4.Выход из системы OpenIDConnect AspNetCore с использованием id_token

Подробное описание:

стороне клиента startup.cs веб-приложение содержит следующий код

app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationScheme = "Cookies", 
      AutomaticAuthenticate = true 
     }); 
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      AuthenticationScheme = "oidc", 
      SignInScheme = "Cookies", 
      Authority = "http://localhost:1941/",//local identityServer4 
      ClientId = "testsoft", 
      ClientSecret = "secret", 
      ResponseType = "code id_token token", 
      GetClaimsFromUserInfoEndpoint = true, 
      RequireHttpsMetadata = false, 
      Scope = { "openid", "profile", "email" }, 
      TokenValidationParameters = new TokenValidationParameters() 
      { 
       NameClaimType = "name", 
       RoleClaimType = "role" 
      }, 
      AutomaticAuthenticate = false, 
      AutomaticChallenge = true 
    }); 

IdentityServer4 работает локально имеет клиент добавил ниже

new Client 
      { 
       ClientId = "testsoft", 
       ClientName = "testsoft", 
       ClientSecrets = new List<Secret> 
       { 
        new Secret("secret".Sha256()) 
       }, 
       ClientUri = "http://localhost:55383/",//clientside web application url 
       AllowedGrantTypes = GrantTypes.Hybrid, 
       AllowAccessTokensViaBrowser = true, 
       RedirectUris = new List<string> 
       { 
        "http://localhost:55383/signin-oidc" 
       }, 
       RequireConsent = false, 
       AllowedScopes = new List<string> 
       { 
        StandardScopes.OpenId.Name, 
        StandardScopes.Profile.Name, 
        StandardScopes.Email.Name, 
        StandardScopes.Roles.Name, 
        StandardScopes.OfflineAccess.Name, 

        "api1", "api2", 
       }, 
      }, 

Я был в состоянии войти в систему и отображать формулы на контроллер в MVC, подобный этому

[Authorize] 
    public IActionResult About() 
    { 
     return View((User as ClaimsPrincipal).Claims); 
    } 

И отображаемый вид был таким. Обратите внимание, что нет id_token

And the view displayed was like this. Note that there is no id_token

И я был в состоянии выйти из системы, используя куки, как указано ниже

public async Task<IActionResult> LogOut() 
    { 

     await HttpContext.Authentication.SignOutAsync("Cookies"); 
     return Redirect("~/"); 
    } 

Но проблема в том, что я не могу найти способ отключала от IdentityServer. Чем ближе я пришел, я должен был использовать /connect/endsession?id_token_hint=...&post_logout_redirect_uri=https://myapp.com

Но я не смог найти способ получить raw id_token в коде. В методе About(), приведенном выше, я получаю только претензии (которые, я думаю, является расшифрованным содержимым id_token), и в этом списке претензий нет id_token. Но каким-то образом удалось получить id_token от скрипача по этому URL-адресу http://localhost:55383/signin-oidc, а затем выходить из системы с помощью identServer (с помощью приведенного выше URL-адреса).

У меня есть следующие вопросы:

  1. Как получить id_token в коде? (вместо ручного копирования от скрипача)
  2. Есть ли лучший способ выхода из системы? Или существует способ рамки AspnetCore/Oidc для выхода из системы (который, в свою очередь, вызывает правильный сервер api с правильными параметрами)?
  3. Мне удалось выйти и войти в систему несколько раз, но id_token был замечен тем же самым на скрипаче. например: пользователь Bob, пользователь Alice имел одинаковый id_token. Cookie был очищен, и каждый раз, когда в представлении отображался другой пользователь, id_token был таким же. не должен ли id_token быть другим для каждого пользователя/пользователя?
  4. Вывод URL-адреса работал, даже когда я дал случайную строку как id_token. Означает ли это, что функция выхода IdentityServer4 не работает на основе id_token?
+1

Вы нашли ответы на свои вопросы? Я сталкиваюсь с теми же проблемами. –

ответ

0

Для выхода из системы сделали вы попытались

HttpContext.Authentication.SignOutAsync("oidc"); 

в Logout действий вашего клиента?

+0

На самом деле, это правильный ответ. Вам необходимо выйти из всех контекстов, в которые вы вошли. Помимо указаний redirect uri в вашей конфигурации клиента, вы также можете указать URL-адрес перенаправления uri. Для получения дополнительной информации см. Документы IdentityServer4 – Flawless

Смежные вопросы