使用 Azure AD 从另一个 webapi/服务访问安全的 Webapi

问题描述 投票:0回答:1

我的 WebAPI 通过 Azure AD 进行保护

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
...
"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "58ca819e-0e9b-4c72-9ae9-",
    "TenantId": "3a0cf09b-2952-4673-9ace-"
  },
...
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
...

如何在后台从另一个WebAPI验证并访问此WebAPI?

asp.net-web-api azure-active-directory
1个回答
0
投票

我们需要在安全的 WebApi 中设置应用程序角色:

enter image description here

为后台WebAPI创建新的应用程序注册。

  • 添加安全Web API的权限。在我的 API/应用程序权限中,勾选角色管理员。最后授予默认目录。

enter image description here

  • 创建客户端密钥。

enter image description here

这是用于测试的 LINQpad 脚本:

async Task Main()
{
    var tenant = "3a0cf09b-";

    // background Web API
    var clientId = "be7e77ba-";
    var clientSecret = "u9h7Q~izIQZkfJbiCwgxy";

    // secured Web API
    var apiScope = "api://58ca819e-/.default";
    
    var token = await $"https://login.microsoftonline.com/{tennant}/oauth2/v2.0/token"
        .PostUrlEncodedAsync(new {
            client_id=clientId,
            scope= apiScope,
            client_secret=clientSecret,
            grant_type="client_credentials"
        }).ReceiveJson<MyClass>();
        
    token.Dump();

    var data = await "https://localhost:5001/WeatherForecast"
        .WithOAuthBearerToken(token.access_token)
        .GetStringAsync();      
    data.Dump();
}

class MyClass
{
    public string access_token { get; set; }
};
© www.soinside.com 2019 - 2024. All rights reserved.