2017-01-31 7 views
0

Я не могу понять, что я делаю неправильно здесь. Я получил почти все, что работает на сервере идентификации 3, и я не считаю себя новичком, но мне действительно трудно перенаправить из приложения javascript из моего выбранного URL-адреса переадресации после использования сгенерированной ссылки для выхода из системы. Некоторые вещи были опущены для краткости (например, полный токен jwt).Нет автоматического перенаправления на конечной точке выхода IdentityServer3

Вот мой запрос:

https://identity.mysite.com/id/connect/endsession?id_token_hint=jwt-id-token&post_logout_redirect_uri=http://localhost:3000/ 

Вот клиент конфигурации:

new Client 
      { 
       ClientName = "Website User", 
       ClientId = "webuser", 
       Flow = Flows.AuthorizationCode, 
       RequireConsent = false, 
       AllowedCorsOrigins = new List<string>() 
       { 
        CloudConfigurationManager.GetSetting("Auth:CorsOriginPrimary"), 
        CloudConfigurationManager.GetSetting("Auth:CorsOriginSecondary"), 
       }, 
       RedirectUris = new List<string> 
       { 
        CloudConfigurationManager.GetSetting("Auth:RedirectUri"), 
        CloudConfigurationManager.GetSetting("Auth:SecondaryRedirectUri"), 
        CloudConfigurationManager.GetSetting("Auth:TertiaryRedirectUri") 
       }, 
       ClientSecrets = new List<Secret> 
       { 
        new Secret(CloudConfigurationManager.GetSetting("WebUser:Secret").Sha256()) 
       }, 
       PostLogoutRedirectUris = new List<string> 
       { 
        CloudConfigurationManager.GetSetting("Auth:WebPostLogoutUri"), 
        CloudConfigurationManager.GetSetting("Auth:WebPostLogoutUri:Local") 
       }, 
       AllowAccessToAllScopes = true 
      }, 

Вот фабрика конфигурации (CORS) материал:

var corsPolicy = new DefaultCorsPolicyService 
      { 
       AllowedOrigins = new[] 
       { 
        "https://storageurl.blob.core.windows.net", 
        CloudConfigurationManager.GetSetting("Auth:CorsOriginPrimary"), 
        CloudConfigurationManager.GetSetting("Auth:CorsOriginSecondary") 
       }, 
       AllowAll = true 
      }; 

Конечно AllowAll = верно на самом деле я просто пытался заставить его работать.

Вот соответствующие записи конфигурации:

<add key="Auth:RedirectUri" value="http://localhost:3000/_oauth/oidc/" /> 
    <add key="Auth:SecondaryRedirectUri" value="http://mysiteloc.com:3000/_oauth/oidc" /> 
    <add key="Auth:TertiaryRedirectUri" value="http://localhost:3000/_oauth/oidc" /> 
    <add key="Auth:CorsOriginPrimary" value="http://localhost:3000" /> 
    <add key="Auth:CorsOriginSecondary" value="http://mysiteloc.com:3000" /> 
    <add key="Auth:WebPostLogoutUri" value="http://localhost:3000/" /> 
    <add key="Auth:WebPostLogoutUri:Local" value="http://mysiteloc:3000/" /> 

А потом вот журналы. Похоже, что с CORS что-то может быть не так, но я не уверен. Я бы подумал, что разрешение исходных данных в заводской конфигурации и конфигурации клиента будет достаточно, но у меня все еще возникают проблемы.

2017-01-30 16:52:14.2034 INFO: Redirecting to logout page 
2017-01-30 16:52:14.2465 INFO: Logout prompt for subject: 2054e687-777b-4ca3-bb20-ee59d8a1dc28 
2017-01-30 16:52:14.2465 INFO: EnableSignOutPrompt set to false, performing logout 
2017-01-30 16:52:14.2465 INFO: Logout endpoint submitted 
2017-01-30 16:52:14.2465 INFO: Logout requested for subject: 2054e687-777b-4ca3-bb20-ee59d8a1dc28 
2017-01-30 16:52:14.2465 INFO: Clearing cookies 
2017-01-30 16:52:14.2580 INFO: rendering logged out page 
2017-01-30 16:52:14.5831 INFO: CSP Report endpoint requested 
2017-01-30 16:52:14.5831 INFO: CSP Report data: {"csp-report":{"document-uri":"https://identity.mysite.com/id/logout","referrer":"http://localhost:3000/reservations/purchase","violated-directive":"script-src 'self' ","effective-directive":"script-src","original-policy":"default-src 'self'; script-src 'self' ; style-src 'self' 'unsafe-inline' ; img-src *; font-src 'self' https://storageurl.blob.core.windows.net/; report-uri https://identity.mysite.com/id/csp/report","blocked-uri":"eval","line-number":174,"column-number":361,"source-file":"https://identity.mysite.com/id/assets/scripts.2.5.0.js","status-code":0}} 
2017-01-30 16:52:14.5831 INFO: Rendering 204 
2017-01-30 16:52:14.7738 INFO: End session callback requested 
2017-01-30 16:52:14.7738 DEBUG: No client end session iframe URLs 

Все, что вы можете мне помочь, было бы удивительно. Я подумал, что, возможно, мне нужно передать код авторизации вместо фактического токена ID здесь, но я видел другие примеры, где они передают токен идентификатора, и он отлично работает. Что мне не хватает?

Редактировать: При взгляде на вкладку сети в Chrome это также похоже на то, что конечная точка конечного конца перенаправляет меня на endessioncallback? Sid = [some-sort-of-id]. Это нормальное поведение?

+0

Другая мысль - когда я отправляю параметр id_token_hint, нужно ли включать какой тип токена? Например, мне нужно обозначение «Носитель» перед токеном? – Ryan

+0

Нет, только id_token как jwt. –

ответ

0

https://identityserver.github.io/Documentation/docsv2/configuration/authenticationOptions.html

EnablePostSignOutAutoRedirect (по умолчанию: ложь)?

Если вы не затронули это свойство в своих вариантах, возможно, это так.

+0

Это свойство уже установлено в true, но не изменило его. Спасибо хоть! – Ryan

+0

Затем вам нужно предоставить более подробную информацию, чтобы понять, что вы испытываете. Как вы перенаправляете на https://identity.mysite.com/id/connect/endsession? windows.location = yoururl? Что произойдет, если вы введете URL концессии вручную, просто открыв новую вкладку и введите id_token и url вручную? Вы вообще видите экран выхода или он не работает? Учитывая, что вы говорили о CORS, это звучит так, будто вы делаете что-то неправильно. CORS не имеет значения, если вы не используете вызов AJAX вместо перенаправления. –

+0

Спасибо за комментарий! Сейчас это просто window.location = yoururl. Если есть лучший способ выписать через ajax, я бы с удовольствием это сделал, так как пользователь все равно хочет выйти из системы, и мне не очень-то нравится показывать им какую-либо обратную связь с сервером идентификации. – Ryan