无法验证我的ACS令牌

时间:2014-02-03 21:45:58

标签: android rest azure acs azureservicebus

我一直试图从android发送消息到一个azure服务总线队列一段时间,我只是不能让它工作。这是我用于获取ACS SWT的代码:

    private void getTokenFromACS() throws ClientProtocolException, IOException {

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://servicebusnamespace-sb.accesscontrol.windows.net/WRAPv0.9/");
        List<NameValuePair> parameters = new ArrayList<NameValuePair>(3);
        parameters.add(new BasicNameValuePair("wrap_name", "name"));
        parameters.add(new BasicNameValuePair("wrap_password", "password associated with the name"));
        parameters.add(new BasicNameValuePair("wrap_scope", "Realm url"));


        httppost.setEntity(new UrlEncodedFormEntity(parameters));

        BasicHttpResponse httpResponse = null;
        httpResponse = (BasicHttpResponse)httpclient.execute(httppost);

        BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));

        String[] tokenVariables = URLDecoder.decode(reader.readLine()).split("&wrap_access_token_expires_in=");


        authorizationToken = tokenVariables[0];

    }

这很好用,我得到一个包含wrap_access_token,issuer,audience,expiresOn和HMACSHA256的字符串。

之后尝试做的是发送带有此令牌的消息,如下所示:

    HttpClient requestClient = new DefaultHttpClient();
        HttpPost post = new HttpPost("https://servicebusnamespace.servicebus.windows.net/queuename/messages");
        post.addHeader("Authorization", "WRAP access_token=\""+authorizationToken+"\"");

        Item item = new Item();
        Date date = new Date();
        item.setDate(date);
        item.setId(1);
        item.setRoadName("roadname");
        item.setSpeed(60.0);
        item.setLat(12.12);
        item.setLng(12.12);

        String json = new GsonBuilder().create().toJson(item, Item.class);
        post.setEntity(new ByteArrayEntity(json.getBytes("UTF8")));

        HttpResponse httpResponse = requestClient.execute(post);

这总是导致我的令牌未经过身份验证,我收到错误消息,说明我的令牌不包含签名或者它没有设置受众。可能有什么不对?

请注意,这是在android =)

提前致谢!

1 个答案:

答案 0 :(得分:0)

好像你错过了一些代码。您的 authorizationToken 目前是这样的:“wrap_access_token = net.windows.servicebus.action%3dLis ...”

您唯一想要的是等号之后的部分。

我认为这样做:

String[] tokenVariables = URLDecoder.decode(reader.readLine()).split("&wrap_access_token_expires_in=")[0].split("=");
authorizationToken = tokenVariables[1];