我正在使用密码grant_type实现OAuth 2令牌流,符合WSO2文档here
我有这个用于登录我当前正在处理的Web应用程序中的用户,并将检索到的访问令牌存储在本地存储中 .
如果我想检查令牌是否仍然有效(比如用户刷新浏览器),是否有我可以检查访问令牌的请求是否仍然有效并且尚未过期?我假设这是对令牌 endpoints URL的某种形式的POST请求?
谢谢
要验证令牌,可以使用管理服务 . 它是一个SOAP服务,在管理服务中调用“验证”方法可用于验证令牌 .
Validation Endpoint https://localhost:9443/services/OAuth2TokenValidationService/
验证方法将在有效期内回复您 . 此服务是一种管理服务,您可以通过基本身份验证和其他身份验证机制(如相互身份验证)来调用 .
我相信另一种方法是将令牌 endpoints 调用为新令牌 . 如果存在有效令牌,则返回AFAIR,它将返回到期时间,您可以计算有效期 .
另一种方法是,如果可能,您可以存储令牌请求的时间,并有一个单独的计时器来检查有效时间是否到期 . 在令牌生成请求第一次发出时,它是具有有效期的返回令牌 .
正如harsha89所提到的,您可以使用OAuth2TokenValidationService进行验证 . 示例SOAP请求将如下所示
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://org.apache.axis2/xsd" xmlns:xsd1="http://dto.oauth2.identity.carbon.wso2.org/xsd"> <soapenv:Header/> <soapenv:Body> <xsd:validate> <xsd:validationReqDTO> <xsd1:accessToken> <xsd1:identifier>b443652fdc3642bb1b3ba8ebae99068</xsd1:identifier><!--access token received--> <xsd1:tokenType>bearer</xsd1:tokenType> </xsd1:accessToken> <xsd1:context> <xsd1:key></xsd1:key> <xsd1:value></xsd1:value> </xsd1:context> </xsd:validationReqDTO> </xsd:validate> </soapenv:Body> </soapenv:Envelope>
样品回复
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns:validateResponse xmlns:ns="http://org.apache.axis2/xsd"> <ns:return xsi:type="ax2369:OAuth2TokenValidationResponseDTO" xmlns:ax2369="http://dto.oauth2.identity.carbon.wso2.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ax2369:authorizationContextToken xsi:type="ax2369:OAuth2TokenValidationResponseDTO_AuthorizationContextToken"> <ax2369:tokenString>eyJhbGciOiJSUzI1NiIsIng1dCI6Ik5tSm1PR1V4TXpabFlqTTJaRFJoTlRabFlUQTFZemRoWlRSaU9XRTBOV0kyTTJKbU9UYzFaQSJ9.eyJodHRwOlwvXC93c28yLm9yZ1wvZ2F0ZXdheVwvYXBwbGljYXRpb25uYW1lIjoiRGVmYXVsdEFwcGxpY2F0aW9uIiwiZXhwIjoxNDQ2Nzg1NjczLCJzdWIiOiJhZG1pbjJAY2FyYm9uLnN1cGVyIiwiaHR0cDpcL1wvd3NvMi5vcmdcL2dhdGV3YXlcL3N1YnNjcmliZXIiOiJhZG1pbiIsImlzcyI6Imh0dHA6XC9cL3dzbzIub3JnXC9nYXRld2F5IiwiaHR0cDpcL1wvd3NvMi5vcmdcL2dhdGV3YXlcL2VuZHVzZXIiOiJhZG1pbjJAY2FyYm9uLnN1cGVyIiwiaHR0cDpcL1wvd3NvMi5vcmdcL2NsYWltc1wvcm9sZSI6WyJJbnRlcm5hbFwvZXZlcnlvbmUiXSwiaWF0IjoxNDQ2NzgzMjExfQ.VY2J_stNVvCwdGdOn71yw96z0EnbtRabQBt8fDFO5LM4TyNmF56T4uXLGjPW-BaHFKEa21ao0s8zW3UVp3yh2Va5pJhJdEcNeSMHObVvDJBdrDbOqrFZnVG7hxV4n4yIJfWt3jciRQz-SdqVYKJuRF-Tn8qfX30m1s0cMeqEZ2A</ax2369:tokenString> <ax2369:tokenType>JWT</ax2369:tokenType> </ax2369:authorizationContextToken> <ax2369:authorizedUser>admin2@carbon.super</ax2369:authorizedUser> <ax2369:errorMsg xsi:nil="true"/> <ax2369:expiryTime>1737</ax2369:expiryTime> <ax2369:scope/> <ax2369:valid>true</ax2369:valid> </ns:return> </ns:validateResponse> </soapenv:Body> </soapenv:Envelope>
2 回答
要验证令牌,可以使用管理服务 . 它是一个SOAP服务,在管理服务中调用“验证”方法可用于验证令牌 .
Validation Endpoint https://localhost:9443/services/OAuth2TokenValidationService/
验证方法将在有效期内回复您 . 此服务是一种管理服务,您可以通过基本身份验证和其他身份验证机制(如相互身份验证)来调用 .
我相信另一种方法是将令牌 endpoints 调用为新令牌 . 如果存在有效令牌,则返回AFAIR,它将返回到期时间,您可以计算有效期 .
另一种方法是,如果可能,您可以存储令牌请求的时间,并有一个单独的计时器来检查有效时间是否到期 . 在令牌生成请求第一次发出时,它是具有有效期的返回令牌 .
正如harsha89所提到的,您可以使用OAuth2TokenValidationService进行验证 . 示例SOAP请求将如下所示
样品回复