我有一个需要授权才能访问 Azure REST API(https://management.azure.com资源,Microsoft.Sql 提供程序)的 Web 服务(ASP Core 3.1)。标准的 oAuth 授权不适合,因为 该服务独立工作,没有用户会通过浏览器登录。
我还尝试以另一种方式获取令牌。令牌被返回,但使用它的请求返回 403(禁止)错误。获取token的方法:
private static async Task<string> GetToken()
{
var url =
"https://login.microsoftonline.com/{tenant}/oauth2/token";
var dict = new Dictionary<string, string>
{
{ "grant_type", "client_credentials" },
{ "client_id", {clientId} },
{ "client_secret", {clientSecret} },
{ "resource", "https://management.azure.com/" }
};
var content = new FormUrlEncodedContent(dict);
using var client = new HttpClient();
client.BaseAddress = new Uri(url);
var response = await client.PostAsync(url, content);
var result = response.Content.ReadAsStringAsync().Result;
return result;
}
}
要在 Azure 门户的应用注册部分中获取令牌,需要使用以下权限注册应用程序:
ClientId、ClientSecret 等 在这两种情况下都从他身上夺走了。为什么通过浏览器获取的具有相同授权数据的token可以访问,而第二种方式获取的token却没有呢?也许有一些更充分的方法可以在没有用户干预的情况下获得令牌?
第二种方法仍然有效。为此,请转到门户上的订阅,在访问控制 (IAM) 部分中,将在应用程序注册中注册的应用程序添加为用户,并为其分配所需的角色/创建具有所需权限的自定义角色。