Microsoft 认知服务 - 身份验证问题,无法获取访问令牌
Posted
技术标签:
【中文标题】Microsoft 认知服务 - 身份验证问题,无法获取访问令牌【英文标题】:Microsoft Cognitive Services - Authentication Issues, Unable to get Access Token 【发布时间】:2016-12-17 03:04:47 【问题描述】:我正在尝试从 android 调用 ms 认知服务。但是,获取访问令牌的 api 不起作用.. 下面是 android 代码
HttpPost httpPost = new HttpPost("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("Ocp-Apim-Subscription-Key", "my subscription key"));
try
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
catch (UnsupportedEncodingException e)
try
HttpResponse response = httpClient.execute(httpPost);
catch (ClientProtocolException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
在 logcat 中,我得到错误:
java.net.UnknownHostException: Unable to resolve host "api.cognitive.microsoft.com": No address associated with hostname
api url“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”有变化吗?
另外,当我在浏览器中输入此 URL“https://api.cognitive.microsoft.com/sts/v1.0/issueToken”时,我会收到消息
"statusCode": 404, "message": "Resource not found"
请帮忙。
【问题讨论】:
关于“无法解析主机“api.cognitive.microsoft.com””的应用程序端 - 检查防火墙/dns。在浏览器中的行为是正确的,只要 GET 什么都不做 - 你应该在那里发布以获取令牌。 我确认没有任何东西阻止请求.. 防火墙/dns 上没有任何东西。感谢您的建议。还有什么想法。 所以这毕竟是一个错字? 【参考方案1】:据我所知,api urlhttps://api.cognitive.microsoft.com/sts/v1.0/issueToken
没有任何变化,与link中描述的内容相同。
我尝试通过工具Postman
调用api,成功获取token,如下。
您无法通过在浏览器中键入 url 获得希望的结果,因为 api 调用是 POST 请求,而不是通过浏览器中的原生 url 的 GET 请求。
根据您的代码,问题似乎是由于缺少所需的内容长度Content-Length: 0
引起的。
作为参考,这是我的示例代码。
URL url = new URL("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestProperty("Ocp-Apim-Subscription-Key", "XXXXXXXX");
conn.setRequestMethod("POST");
conn.setDoOutput(true); // Must set do output true
conn.setFixedLengthStreamingMode(0); // Set Content-Length 0
conn.connect();
int code = conn.getResponseCode();
String msg = conn.getResponseMessage();
System.out.println(code+"\t"+msg);
IOUtils.copy(conn.getInputStream(), System.out);
上述代码的响应如下。
200 OK
eyXXXXXXXXXXXXXXXXXXXXXXXXXX
【讨论】:
我尝试了您共享的代码,但出现错误:“12-21 17:18:33.063: W/System.err(5372): java.net.UnknownHostException: Unable to resolve host “api.cognitive.microsoft.com”:没有与主机名关联的地址“ 潘 - 我的错,有一个错字。您的解决方案运行良好。非常感谢您的详细解释。赞赏。以上是关于Microsoft 认知服务 - 身份验证问题,无法获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何使用身份服务器 3 和 microsoft 团队应用程序使用 Azure AD 令牌进行身份验证
具有无状态服务器且无服务器端呈现的 cookie 中的 JWT 身份验证