我正在尝试设置OAM 12c以通过默认设置实施OAuth。 寻求帮助来解决与签名相关的问题。
Issue - Caused by: java.security.SignatureException: Signature length not correct: got 256 but was expecting 128
用例–使用OAM证书在本地验证OAM 12c访问令牌以实现OAuth(两路流程)
说明- OSB(Oracle服务总线)是一种Oracle产品,用于通过OWSM产品实现REST服务和安全服务。 一个UI应用程序(为了进行仿真,我们使用SOAP UI)将调用此REST服务,并将JWT令牌作为Bearer令牌传递(通过调用OAM 12c REST API生成的令牌) OSB应该使用OAM证书来验证令牌。
执行的步骤- 1.将OAM证书(在fmwconfig / defaultkeystore别名orakey下)导入OWSM默认密钥存储中,并且根据oracle文档,它应使用OAM证书在本地验证传入的JWT访问令牌。 2.使用OAM API创建标识域,资源服务器和客户端 3.通过调用OAM API创建令牌 4.将此令牌传递给OSB REST API 5.令牌验证失败,但OSB日志中出现以下异常。
我们收到的异常是–
Caused by: java.security.SignatureException: Signature length not correct: got 256 but was expecting 128
at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:189)
at java.security.Signature$Delegate.engineVerify(Signature.java:1219)
at java.security.Signature.verify(Signature.java:652)
at oracle.security.restsec.jwt.JwtToken.verify(JwtToken.java:1558)
我已经验证过,OAM12c生成的令牌是带有RSASHA256签名的RSA256,但看起来OSB(12.2.1.3.0)无法使用该令牌,请告知您的输入并帮助解决此问题。
答案 0 :(得分:0)
在我看来,问题在于使用不正确的证书进行签名验证。
在 OAM 12c 中,每个创建的OAuth域都具有其自己的一组公共-私有密钥对(证书)。这些证书不存储在fmwconfig / defaultkeystore别名orakey下。
在最新的12cPS3捆绑包补丁中, 尝试使用以下URL来获取OAuth域证书。
curl -X GET "http://{managed server host}:{managed server port}/oauth2/rest/security" -H 'authorization: Basic ...' -H 'X-OAUTH-IDENTITY-DOMAIN-NAME: <OAuth Domain Name>'
其中的基本授权标头包含-B64编码的“ OAuth客户端ID:密码”
响应将在JSON Web密钥规范中,即RFC 7517。