Azure Active Directory (AAD) 是微软提供的基于云的身份和访问管理服务,用于保护 Web API 调用。AAD 验证使用 OAuth 2.0 和 OpenID Connect 协议来实现安全的身份验证和授权。
首先需要在Azure AD中注册两个应用:
为API应用公开API范围并添加客户端应用为已知客户端。
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
services.AddControllers();
}
// appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "api-client-id",
"Audience": "api-client-id"
}
}
// Controller
[Authorize]
[ApiController]
[Route("[controller]")]
public class SecureController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok("Secure data");
}
}
// 获取访问令牌
public async Task<string> GetAccessTokenAsync()
{
var clientId = "client-app-id";
var clientSecret = "client-secret";
var tenantId = "tenant-id";
var scope = "api://api-client-id/.default";
var client = new HttpClient();
var tokenEndpoint = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token";
var request = new HttpRequestMessage(HttpMethod.Post, tokenEndpoint);
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("client_id", clientId),
new KeyValuePair<string, string>("scope", scope),
new KeyValuePair<string, string>("client_secret", clientSecret),
new KeyValuePair<string, string>("grant_type", "client_credentials")
});
request.Content = content;
var response = await client.SendAsync(request);
var responseContent = await response.Content.ReadAsStringAsync();
var tokenResponse = JsonSerializer.Deserialize<JsonElement>(responseContent);
return tokenResponse.GetProperty("access_token").GetString();
}
// 调用受保护的API
public async Task<string> CallSecureApiAsync()
{
var accessToken = await GetAccessTokenAsync();
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.GetAsync("https://yourapi.azurewebsites.net/secure");
return await response.Content.ReadAsStringAsync();
}
原因:
解决方案:
原因:
解决方案:
原因:
解决方案:
通过正确配置AAD验证,可以有效地保护Web API免受未经授权的访问,同时提供灵活的身份管理和访问控制。
没有搜到相关的文章