根据OpenID Connect Core 1.0 specification,如果身份验证请求包含值为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 Identity Server 5.0.0
提前感谢您的回答!
答案 0 :(得分:1)
根据规范 客户端可以使用prompt参数来确保最终用户仍然存在于当前会话中或引起对请求的注意。如果此参数不包含任何其他值,则会返回错误。
但是在这个请求中只发送none作为提示值,因此提示值设置为none,其他任何值都会产生错误。
示例:
curl -v -k -X GET "https://localhost:9444/oauth2/authorize?prompt=none+login&scope=openid..."
答案 1 :(得分:0)
也许您可以使用以下请求来验证令牌:
curl -k -H "Authorization: Bearer <token>" \
https://localhost:9443/oauth2/userinfo?schema=openid
如果用户通过身份验证,则返回用户信息。我知道这是解决方法,你不能获得令牌过期数据,但在某些情况下可能是有用的。我带着类似的问题来到这里,你的问题让我知道如何解决它。