2017-01-06 4 views
1

webserviceログイン用のトークン/サインのペアを検証しようとしているときに問題があります。Java RestEasy:Base64で符号化されたREST

WSはsoap-wsdl 1.1として公開されていますが、クライアントは対応するネイティブアプリケーションを介して消費する必要があります。数時間の研究の後、私たち(クライアントと私)は、wsdlを消費し、残りのAPIとして公開するRest-proxyを公開する方が速いという結論に終わった。 LoginResponseは、以下の構造を有する、JSONを介して送信される

<xs:sequence> 
<xs:element minOccurs="0" name="token" type="xs:string"/> 
<xs:element minOccurs="0" name="firma" type="xs:base64Binary"/> 
</xs:sequence> 

検証トークンの

+login(String: username, String: password): LoginResponse(String token, Base64Binary sign); 

+verifyToken(String: token, Base64Binary: sign): Boolean; 

WSDLパラメータおよび署名:

WSは、認証のためだけであり、2つの方法で構成さ

public class LoginResponse { 

    private byte[] firma; 
    private String token; 

} 

次にverifyTokenによって文字列として受け取られます:

@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メソッドが正しく動作します。

ありがとうございました。

答えて

1

私は文字列変換にBASE64を使用して、問題を解決することができなかったとして、私は次のことをやった:

は、16進文字列 -verifyTokenへのBase64バイト配列は、現在記号として16進文字列を受け入れ-Converted。 - 16進文字列の符号をバイト配列に戻しました。

16進変換は、次の式で与えられました。https://stackoverflow.com/a/5942951/2350854

関連する問題