在代码流期间,IdentityServer应该返回什么?

问题描述

我正在尝试使用Vue.js中的oidc-client库在SPA中进行身份验证。我一直跟随着本教程:https://damienbod.com/2019/01/29/securing-a-vue-js-app-using-openid-connect-code-flow-with-pkce-and-identityserver4/,除了将URL更改为我自己的本地主机外,我的代码几乎相同。我之前没有使用过代码流,所以我只想验证登录阶段之后服务器实际上应该返回什么。

本质上,我的问题是,当应用程序进入callback.html时,出现如下错误

Error: No state in response
    at e.t [as readSigninResponseState] (oidc-client.min.js:1)
    at e.t [as processSigninResponse] (oidc-client.min.js:1)
    at e.t [as _signinEnd] (oidc-client.min.js:47)
    at e.t [as signinRedirectCallback] (oidc-client.min.js:47)
    at callback.html:10

由于在callback.html上的此调用而发生:

var mgr = new Oidc.UserManager({ response_mode: 'query',userStore: new Oidc.WebStorageStateStore() }).signinRedirectCallback()

到目前为止,一切看起来都很正常-我可以单击登录名,它会将我重定向到我的IdentityServer登录页面,可以登录,并且可以验证服务器中没有抛出任何错误。我担心的是,重定向没有传递足够的信息。本质上,它会执行完全重定向回callback.html的操作,但URL中仅包含回调数据。相反,我在请求标头中得到的是一个Asp.Net反伪造cookie和一个包含带有信息的returnUrl的引荐来源,该信息包括响应类型,重定向uri,作用域等。

作为从IdentityServer重定向的一部分,我还获得了一个额外的cookie,该cookie已加密,名为.AspNetCore.Identity.Application。我假设这是包含身份验证数据的内容,但我只是想确保到目前为止所获得的内容是正常的。这是代码流的预期行为吗?

修改

经过更多调查,我注意到,尽管登录重定向后我的callback.html文件失败,但是如果返回首页并再次单击“登录”按钮,它会将我重定向回到callback.html页面查询字符串类似于以下内容

 https://localhost:44357/callback.html?code=aee0eafb34066958344bb53c01974224930bbdd2d94909f49c77d5157fb6aeed&scope=openid%20profile%20offline_access&state=921f726007c4431691d47340b433d097&session_state=rd7WVDvMipwPqKviVZNSkbbhRoEoIftGbv9R841SuRs.a0674cdf7462338238499b73682dc5b5

此后,我被重定向回主页,并且已经成功通过身份验证。

这几乎是我所期望的,也是我在原始问题中提到的内容。这是由于在oidc客户端库上调用userManager.signinRedirect()的结果。

我不确定它是如何设法找到该信息的,服务器是否应该首先重定向到该URL?我不太清楚这是客户端还是服务器端的期望。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)