1

identityserver v3 ポスト ログアウト機能を使用しようとしています。

ログインは正常で、ログアウトする場合は、(/.well-known/openid-configuration) から要求された検出ドキュメントにある「end_session_endpoint」エンドポイントを呼び出します。id_token_hintpost_logout_redirect_uriを渡します(に従ってthis :ログアウト エンドポイント

id_token_hint には、ログイン フェーズで受け取ったid_tokenを渡します (localstorage に入れました)。post_logout_redirect_uriには、クライアント用に構成された uri を渡します。

ID サーバーのログに次のステートメントが表示されます

しかし、私は例外を受け取ります:

   idsrv3.vshost.exe Information: 0 : [Thinktecture.IdentityServer.Core.Endpoints.E
    ndSessionController]: 27/03/2015 14:36:09 +00:00 -- End end session request
    idsrv3.vshost.exe Information: 0 : [Thinktecture.IdentityServer.Core.Endpoints.E
    ndSessionController]: 27/03/2015 14:36:09 +00:00 -- End end session request
    idsrv3.vshost.exe Information: 0 : [Thinktecture.IdentityServer.Core.Results.Log
    outResult]: 27/03/2015 14:36:09 +00:00 -- Redirecting to logout page
    idsrv3.vshost.exe Information: 0 : [Thinktecture.IdentityServer.Core.Results.Log
    outResult]: 27/03/2015 14:36:09 +00:00 -- Redirecting to logout page
    idsrv3.vshost.exe Error: 0 : [Thinktecture.IdentityServer.Core.Configuration.Hos
    ting.LogProviderExceptionLogger]: 27/03/2015 14:36:12 +00:00 -- Unhandled except
    ion
    System.Exception: Illegal base64url string!
       at Thinktecture.IdentityModel.Base64Url.Decode(String arg) in c:\etc\Dropbox\
    thinktecture\IdentityModel\source\Core\Base64Url.cs:line 34
       at Thinktecture.IdentityServer.Core.Extensions.IDataProtectorExtensions.Unpro
    tect(IDataProtector protector, String data, String entropy) in c:\ballen\github\
    thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\Core\Extensions\IDataPro
    tectorExtensions.cs:line 52
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Unp
    rotect(String data, IDataProtector protector) in c:\ballen\github\thinktecture\I
    dSrv3\Thinktecture.IdentityServer3\source\Core\Configuration\Hosting\MessageCook
    ie.cs:line 81
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Unp
    rotect(String data) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identit
    yServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 125
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Rea
    dByCookieName(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.
    IdentityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 171
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Get
    CookieRank(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Ide
    ntityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 203
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.<Cl
    earOverflow>b__a(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktectu
    re.IdentityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 227
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.<SkipIterator>d__4d`1.MoveNext()
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Cle
    arOverflow() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer
    3\source\Core\Configuration\Hosting\MessageCookie.cs:line 232
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Wri
    te(TMessage message) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identi
    tyServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 138
       at Thinktecture.IdentityServer.Core.Results.LogoutResult.Execute() in c:\ball
    en\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\Core\Results\L
    ogoutResult.cs:line 73
       at Thinktecture.IdentityServer.Core.Results.LogoutResult.ExecuteAsync(Cancell
    ationToken cancellationToken) in c:\ballen\github\thinktecture\IdSrv3\Thinktectu
    re.IdentityServer3\source\Core\Results\LogoutResult.cs:line 61
       at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncC
    ore>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identit
    yServer3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCor
    e>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityS
    erver3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCor
    e>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityS
    erver3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext
    () in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\C
    ore\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Controllers.AuthenticationFilterResult.<ExecuteAsync>d__0.
    MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\
    source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNe
    xt() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source
    \Core\Services\Default\DefaultConsentService.cs:line 0
    idsrv3.vshost.exe Error: 0 : [Thinktecture.IdentityServer.Core.Configuration.Hos
    ting.LogProviderExceptionLogger]: 27/03/2015 14:36:12 +00:00 -- Unhandled except
    ion
    System.Exception: Illegal base64url string!
       at Thinktecture.IdentityModel.Base64Url.Decode(String arg) in c:\etc\Dropbox\
    thinktecture\IdentityModel\source\Core\Base64Url.cs:line 34
       at Thinktecture.IdentityServer.Core.Extensions.IDataProtectorExtensions.Unpro
    tect(IDataProtector protector, String data, String entropy) in c:\ballen\github\
    thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\Core\Extensions\IDataPro
    tectorExtensions.cs:line 52
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Unp
    rotect(String data, IDataProtector protector) in c:\ballen\github\thinktecture\I
    dSrv3\Thinktecture.IdentityServer3\source\Core\Configuration\Hosting\MessageCook
    ie.cs:line 81
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Unp
    rotect(String data) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identit
    yServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 125
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Rea
    dByCookieName(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.
    IdentityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 171
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Get
    CookieRank(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Ide
    ntityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 203
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.<Cl
    earOverflow>b__a(String name) in c:\ballen\github\thinktecture\IdSrv3\Thinktectu
    re.IdentityServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 227
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.<SkipIterator>d__4d`1.MoveNext()
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Cle
    arOverflow() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer
    3\source\Core\Configuration\Hosting\MessageCookie.cs:line 232
       at Thinktecture.IdentityServer.Core.Configuration.Hosting.MessageCookie`1.Wri
    te(TMessage message) in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identi
    tyServer3\source\Core\Configuration\Hosting\MessageCookie.cs:line 138
       at Thinktecture.IdentityServer.Core.Results.LogoutResult.Execute() in c:\ball
    en\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\Core\Results\L
    ogoutResult.cs:line 73
       at Thinktecture.IdentityServer.Core.Results.LogoutResult.ExecuteAsync(Cancell
    ationToken cancellationToken) in c:\ballen\github\thinktecture\IdSrv3\Thinktectu
    re.IdentityServer3\source\Core\Results\LogoutResult.cs:line 61
       at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncC
    ore>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.Identit
    yServer3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCor
    e>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityS
    erver3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d
    __5.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServ
    er3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCor
    e>d__0.MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityS
    erver3\source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext
    () in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source\C
    ore\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Controllers.AuthenticationFilterResult.<ExecuteAsync>d__0.
    MoveNext() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\
    source\Core\Services\Default\DefaultConsentService.cs:line 0
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
    ification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNe
    xt() in c:\ballen\github\thinktecture\IdSrv3\Thinktecture.IdentityServer3\source
    \Core\Services\Default\DefaultConsentService.cs:line 0

ここで Client.cs ファイルの私の設定:

                PostLogoutRedirectUris = new List<string>
                {
                    "http://localhost:8000/demoApp/index.html"
                },

ログアウトのために発行するリクエストは次のとおりです。

https://localhost:44333/connect/endsession?id_token_hint=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImEzck1VZ01Gdjl0UGNsTGE2eUYzekFrZnF1RSIsImtpZCI6ImEzck1VZ01Gdjl0UGNsTGE2eUYzekFrZnF1RSJ9.eyJub25jZSI6IjVkNzg0ODhhLTFlNWEtNGQyOC05Y2FhLTIxODUzYTdkNDQ0NSIsImlhdCI6MTQyNzQ2NTA5NCwiYXRfaGFzaCI6ImlIVG1NVGFFNVVmYWF1WFJaQ1pLdXciLCJzdWIiOiJJIGFtIHRoZSBTdWJqZWN0IiwiYW1yIjoicGFzc3dvcmQiLCJhdXRoX3RpbWUiOjE0Mjc0NjEwODksImlkcCI6Imlkc3J2IiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMzMiLCJhdWQiOiJpbXBsaWNpdGNsaWVudCIsImV4cCI6MTQyNzQ2NTQ1NCwibmJmIjoxNDI3NDY1MDk0fQ.K5HmHf66sDBVuNT0YX3O_LPAcDnaF7iAeX_bssLdNKzwRDHEsYT0cergFJu8aglR25HUBRGb-wxSk-c7q0BIObdQArlOcH917w54FVlbsA8F8jAxnzq7eyK394TLEvFJMgrNktgzLWwV3NqOALGJ2aBo76wlLCDmSZjdulbbROP_tLNSKHNtUq8fcDodfvvfk1IKkxsUGW_1dqI2s3ZxaudoBQy_AZJbcaONEkQLxaoi4Z0b8lKDIgpwjjeSeAtryUc-K_dw6cfJLA3mePupJmFT2rHGo7aq81YJm0tai6qbHbCBKbX7gNaLSJ9t61Z0sGCX-dG_9YHk1crwfSTEdw&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A8000%2FdemoApp%2Findex.html

ID サーバーの問題として投稿する前に、誰かがこの機能を javascript (angular) の暗黙的なクライアントで実装したかどうかを知りたいです。

4

1 に答える 1

0

私は単にやった

https://localhost:44333/connect/endsession

Cookieからセッションを取得しました。

于 2015-05-27T14:48:29.627 に答える