我在尝试验证一对令牌/签名以进行网络服务登录时遇到了麻烦。
WS作为soap-wsdl 1.1公开,但客户端需要通过react-native应用程序来使用它。经过数小时的研究,我们(客户和我)最终得出的结论是,发布一个使用wsdl的Rest-proxy并将其作为rest api公开会更快。
WS仅用于身份验证,包含两种方法:
+login(String: username, String: password): LoginResponse(String token, Base64Binary sign);
+verifyToken(String: token, Base64Binary: sign): Boolean;
用于令牌和签名验证的wsdl参数
<xs:sequence>
<xs:element minOccurs="0" name="token" type="xs:string"/>
<xs:element minOccurs="0" name="firma" type="xs:base64Binary"/>
</xs:sequence>
LoginResponse通过json发送,具有以下结构:
public class LoginResponse {
private byte[] firma;
private String token;
}
然后由verifyToken接收为String:
@GET
@Path("/validarToken")
@Produces(MediaType.APPLICATION_JSON)
public Response verifyToken(@QueryParam("token") String token,
@QueryParam("sign") String sign) {
}
然后,使用sign.getBytes();
转换符号我注意到当我调试login()返回的byteArray时,数组包含负数,但是当被verifyToken接收并转换为字节时,不表示负值(结果数组不相同) )。
然而,如果我在使用LoginResponse登录后直接调用verifyToken,它会正确验证,因此方法verifyToken可以正常工作。
感谢。
答案 0 :(得分:1)
由于我无法使用base64到String转换解决问题,我已完成以下操作:
- 将Base64字节数组转换为十六进制字符串 -verifyToken现在接受十六进制字符串作为符号。 - 将十六进制字符串符号转换回字节数组。
提供