我正在尝试检索 Azure 授权代码,以便提取访问令牌以调用 Azure 计费 API(RateCard 和使用情况 API)。
我正在遵循微软在此处解释的 oauth 协议。我的实现如下所示。请注意,参数中的 redirect_uri 是 Azure AD 在进行身份验证后将重定向回的 uri。但是,当我尝试执行此操作时,出现以下 cors 错误:“XMLHttpRequest 无法加载” https://login.microsoftonline.com/imonlineservices.com/oauth2/authorize?res...ure.com&redirect_uri=http%3a%2f %2flocalhost%3a13333%2f&response_mode=query "。请求的资源上没有 'Access-Control-Allow-Origin' 标头。因此不允许访问源 ' http://localhost:13333 '。" 如图 2 所示。
据我了解,这告诉我“login.microsoftonline.com....”上没有“Access-Control-Allow-Origin”标头,这导致我的请求由于同源策略而失败。
现在虽然我理解这个错误,但我仍然对上面提到的链接给出的解释感到困惑,这应该有效吗?我不确定我到底哪里错了。
负责尝试检索 Auth 代码的方法:
public void GetAuthorizationCode(string ClientId)
{
var @params = new NameValueCollection
{
{"response_type", "code"},
{ "client_id", ClientId},
{"resource", "https://management.azure.com"},
{ "redirect_uri", "http://localhost:13333/"}
};
var queryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
queryString.Add(@params);
Response.Redirect(String.Format("https://login.windows.net/common/oauth2/authorize?{0}", queryString));
}
更新
将重定向请求直接粘贴到浏览器中时,此 ..." https://login.windows.net/common/oauth2/authorize ?{0}", queryString".. login.windows.net 返回响应(代码)作为查询字符串参数返回到我的应用程序,如下图 1 所示,这表明所有必要的 Azure 配置都已正确完成,错误仅在于我尝试检索此代码的方式。