5

根据OpenID Connect Core 1.0 规范,如果身份验证请求包含prompt带值的参数none,服务器必须按以下方式处理它:

授权服务器不得显示任何身份验证或同意用户界面页面。如果最终用户尚未通过身份验证,或者客户没有预先配置对请求的声明的同意或不满足处理请求的其他条件,则会返回错误。错误代码通常是 login_required、interaction_required 或第 3.1.2.6 节中定义的其他代码。这可以用作检查现有身份验证和/或同意的方法。

我的问题是,每当我尝试验证在这种方式之前收到的访问令牌(传递prompt=none对以及其他必需参数)时,WSO2 IS 服务器总是回复代码 302 并重定向到登录页面。以下是以下cURL命令的相应输出:

curl -v -k -X GET "https://localhost:9443/oauth2/authorize?prompt=none&scope=openid&client_id=BpMCycs5nBuZCpVLwSE5f6Hf5CYa&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fmy-app%2Fmy-ctx" --header "Authorization: Bearer a65544593fg9c67rbf95fc24a6953cb4"

> GET /oauth2/authorize?prompt=none&scope=openid&client_id=BpMCycs5nBuZCpVLwSE5f
6Hf5CYa&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fmy-app%2Fmy-ctx HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:9443
> Accept: */*
> Authorization: Bearer a65544593fg9c67rbf95fc24a6953cb4
>
< HTTP/1.1 302 Found
< Date: Thu, 14 Aug 2014 17:01:17 GMT
< Location: https://localhost:9443/commonauth/?sessionDataKey=bf5be153-4j31-429b
-9fa6-97rr27da213&type=oidc&commonAuthCallerPath=/oauth2/authorize&forceAuthent
icate=false&checkAuthentication=false&relyingParty=BpKCycd5dBfZdpVswSE5f6Hf5CYa&
tenantId=-1234&prompt%3Dnone%26scope%3Dopenid%26client_id%3DBpKCycr5dBuZCpVBwSE5
f6Hf5CYa%26response_type%3Dcode%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%25
3A8080%252Fmy-app%252Fmy-ctx

有人可以告诉我 - 这是身份验证请求本身的问题,我做错了什么或 WSO2 IS 服务器行为在这种情况下不符合规范?

我使用WSO2 身份服务器 5.0.0

提前感谢您的回答!

4

2 回答 2

2

根据规范,客户端可以使用提示参数来确保最终用户在当前会话中仍然存在或引起对请求的注意。如果此参数不包含任何其他值,则返回错误。

但是在这个请求中,只发送 none 作为提示值,所以提示值设置为 none,任何其他值都会给出错误。

例子:

curl -v -k -X GET "https://localhost:9444/oauth2/authorize?prompt=none+login&scope=openid..."

于 2014-09-22T23:42:15.557 回答
0

也许您可以使用以下请求来验证令牌:

curl -k -H "Authorization: Bearer <token>" \
https://localhost:9443/oauth2/userinfo?schema=openid

如果用户通过身份验证,它将返回用户信息。我知道这是一种解决方法,您无法获取令牌过期数据,但在某些情况下可能很有用。我带着类似的问题来到这里,你的问题让我知道如何解决它。

于 2016-09-22T19:34:10.527 回答