2015-09-25 21 views
0

我正嘗試在Azure雲上創建一個隊列。我有一個Azure帳戶,命名空間和使用服務總線。由於一些限制,我需要使用RAW GET/PUT請求來做到這一點,所以我使用Simple REST Client使用簡單REST客戶端的Microsoft Azure CreateQueue

這些都是在REST客戶端領域中提到的值:


URL

https://mynamespace-ns.servicebus.windows.net/

方法

PUT

集管

PUT/testqueue超時= 30 HTTP/1.1

X-MS-日期:星期五,2015年9月25日GMT三點16分12秒

X-MS-版本: 2009-09-19

授權:SharedKey myNameSpace對象-NS:oucfev8CXZPMsli4t7iZJ + nlC0fUwasyPH5OdSqi9po =

主機:mynamespace-ns.servicebus.windows.net

的Content-Length:0


這是我如何生成授權密鑰:

HmacSha256編碼字符串「PUT \ n \ n \ n \ N0 \ n \ n \ n \ n \ n \ n \ n \ nx-ms-date:週五,2015年9月25日03:16:12 GMT \ nx-ms-version:2009-09-19 \ n/mynamespace-ns「從Azure Portal上的連接信息頁面複製SharedAccessKey。之後Base64對結果字符串進行編碼。

的每次我送我得到了以下回應請求:

401 MalformedToken:無效的授權頭:此要求未WRAP認證證書。 TrackingId:8d52cae0-0dba-470d-8db2-3e76d4fd4d0b_G27,時間戳:9/25/2015 9:45:17 AM

任何人都可以請告訴我失蹤或我做錯了什麼?

回答

1

請求必須在請求標頭中附加一個訪問令牌。使用Azure服務總線時,您需要從Azure訪問控制服務獲取令牌。找到了這個網頁...

Azure Access Token Patterns

你並不需要使用SDK做到這一切,因爲我從Android程序做同樣的。

編輯...

你必須調整這對任何語言所使用。

首先獲取令牌...因爲我訪問服務總線和正在創建隊列

URL acsUrl = new URL("https://yournamespace-sb.accesscontrol.windows.net/WRAPv0.9/"); 
URL realm = new URL("http://yournamespace.servicebus.windows.net"); 
httpConn = (HttpURLConnection) acsUrl.openConnection(); 
httpConn.setRequestMethod("POST"); 
httpConn.setUseCaches(false); 
httpConn.setDoInput(true); 
httpConn.setDoOutput(true); 
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

String body = "wrap_name=" + URLEncoder.encode(AdminConstants.ISSUER, "UTF-8") + 
"&wrap_password=" + URLEncoder.encode(AdminConstants.ISSUER_SECRET, "UTF-8") + 
"&wrap_scope=" + URLEncoder.encode(realm, "UTF-8"); 
byte[] postBytes = body.getBytes(); 
httpConn.setRequestProperty("Content-Length", Integer.toString(postBytes.length)); 
httpConn.setRequestProperty("Expect", "100-continue"); 
httpConn.setRequestProperty("Accept", "*/*"); 

/* Fire the request here */ 

String[] responseProperties = response.toString().split("&"); 
String[] tokenProperty = responseProperties[0].split("="); 
String token = URLDecoder.decode(tokenProperty[1], "UTF-8"); 

你的境界將是不同的。

最後,當你讓你的電話創建隊列,你將不得不在帖子的請求這樣的標記......

httpConn.setRequestProperty("Authorization", "WRAP access_token=\"" + getAcsToken() + "\""); 
+0

感謝Dascalos指點出來。現在我知道丟失了什麼,但是由於我在原始GET/PUT請求中工作,所以.Net文章似乎沒有多大幫助。 –

+0

你不需要SDK。有一些標題值需要伴隨POST請求。上面的文章顯示了您需要的標題值。我可能會發布一些東西,顯示我是如何從Android中完成的。 – dascalos

+0

是的,我做了一些搜索,發現可以使用POST標頭獲取令牌,以後我可以使用它來執行操作。但是我沒有得到該令牌請求的正確格式。 我真的很感激,如果你可以發佈你是如何從Android做到的。與此同時,我會嘗試其他一些修改。 –