如何解决如何从Microsoft OAuth2解码访问令牌
我正在使用CakePHP 4.1构建Web应用程序。
它具有Microsoft Active Directory(OAuth2)的授权。
我要做的是对访问令牌进行解码,并在过期时重定向到Microsoft登录页面。
这样我就可以从授权中获取令牌。
https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/authorize?client_id=CLIENT_ID&response_type=token&redirect_uri=LOGIN_REDIRECT_URI&response_mode=form_post&scope=offline_access https://graph.microsoft.com/.default'
我尝试使用firebase/jwt
进行解码,但是我不确定应该是$key
。
JWT::decode($accessToken,$key,array('RS256'))
如果我在jwt.ms中输入令牌,我可以得到解码结果。
我没有任何特殊的claims
,因此$key
应该是plain
。
我想知道是否还有另一种解码jwt的方法。
解决方法
Firebase JWT仅支持带签名验证的解码,因此始终需要密钥。
您可以手动解码令牌,它只是作为base64的JSON,但是如果没有验证,就无法知道信息是否是伪造的,因此,我将不信任以这种方式获得的任何信息,甚至不相信到期时间
通常,OAuth API会在响应中返回访问令牌请求(和so does Microsofts Identity Platform API)的过期时间,您的应用程序可以将其与令牌一起存储,并用于检查可能的令牌过期。
通常也可以选择从API接收到无效的令牌错误后刷新,因此您完全不必担心自己的到期时间。
我肯定会建议在信任任意客户端数据方面采取任何这些选择。
话虽这么说,如果您仍然希望令牌具有未验证的到期时间,只需执行Firebase JWT内部操作即可:
$tks = \explode('.',$accessToken);
if (\count($tks) != 3) {
throw new \UnexpectedValueException('Wrong number of segments');
}
list($headb64,$bodyb64,$cryptob64) = $tks;
if (null === ($header = JWT::jsonDecode(JWT::urlsafeB64Decode($headb64)))) {
throw new \UnexpectedValueException('Invalid header encoding');
}
if (null === $payload = JWT::jsonDecode(JWT::urlsafeB64Decode($bodyb64))) {
throw new \UnexpectedValueException('Invalid claims encoding');
}
if (false === ($sig = JWT::urlsafeB64Decode($cryptob64))) {
throw new \UnexpectedValueException('Invalid signature encoding');
}
https://github.com/firebase/php-jwt/blob/v5.2.0/src/JWT.php#L81-L94
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。