【问题标题】:Silent authentification with oauth2 (prompt=none)使用 oauth2 进行静默身份验证(提示=无)
【发布时间】:2018-07-27 13:10:41
【问题描述】:

您好,我有 SPA(单页应用程序),我使用 oauth2 隐式授权进行授权。作为身份服务器,我有 Wso2 身份服务器 5.4.1。

我能够授权该应用程序,并且一切正常 - 我还配置为跳过同意。

问题来了: 我正在尝试通过以下链接在 .../oauth2/authorize 服务和属性 prompt=none 的帮助下以静默方式重新验证登录用户:

https://xxx:9447/oauth2/authorize?response_type=id_token token&nonce=123&prompt=none&client_id=xxxx&scope=openid&redirect_uri=http://localhost:63342/myapp/www/index.html&id_token_hint=previous_user_token

这里写的 promp=none:

http://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint 我应该能够在用户登录并将同意配置为跳过或始终批准时对其进行身份验证。

但我总是在 URI 中得到同样的错误:

http://localhost:63342/myapp/www/index.html#error_description=Authentication+required&error=login_required&session_state=state124124125125.1251512

【问题讨论】:

  • 我猜 WSO2 使用 cookie 作为会话标识符,您是否检查过 /authorize 请求发送的 cookie 是否正确?
  • 也许你必须在 header 上传递 client_id 和 secret ?
  • @Max 不,客户端密码是您不存储在 SPA 应用程序客户端的内容。这将是不安全的
  • 或者,您可以使用 signinSilent()。检查:stackoverflow.com/a/63609654/6363952

标签: authentication oauth-2.0 wso2


【解决方案1】:

此错误 login_required 表示您的用户未在 IP 上登录。您必须首先通过将其重定向到授权端点而不将提示参数设置为 none 来要求他进行连接。

见:http://openid.net/specs/openid-connect-core-1_0.html#AuthError

login_required 授权服务器需要最终用户身份验证。当 Authentication Request 中的 prompt 参数值为 none 时,可能会返回此错误,但如果不显示 End-User 身份验证的用户界面,则无法完成 Authentication Request。

根据文档,似乎用户必须在同意页面上选择选项:始终批准。您是否使用此选项进行了测试?

文档:https://docs.wso2.com/display/IS530/Basic+Client+Profile+with+Playground

点击批准以表示同意此操作。画面提到 服务提供商的名称和请求用户同意提供 该特定服务提供商的用户信息。用户可以 拒绝向服务提供商提供信息。批准 向该服务提供商提供用户个人资料信息仅用于 这次。

始终批准以提供共享用户个人资料的批准 与服务提供商的信息即使在未来没有 再次提示同意。

【讨论】:

  • 您好,我已经写过我已将同意配置为跳过,这意味着始终批准...并且当我尝试重新验证时用户已经登录...
  • 是的,问题是同意需要设置为始终批准
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多