我的 Azure Web 應用程式正在呼叫我的 Azure API 應用程式端點。兩種應用服務都在同一個 Azure 訂閱和 RG 中。Web App 是 .NET Core Web 應用程式,API App 是 .NET Core Web API。Web App 使用標準 HttpClient 類來呼叫 API App 端點。
我關注了https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=portal,dotnet并創建了一個用戶分配的托管標識。然后將此標識分配給 Azure API 應用程式,角色為參與者。
Web 應用程式仍未分配上述托管標識,但它仍然可以訪問此 API 應用程式而不會引發預期的未經授權的錯誤。
我的問題是,我該如何限制只有這個托管身份才能訪問提到的 API 應用程式?代碼 middlweware 或其他一些 Azure 設定?
uj5u.com熱心網友回復:
您的 API 應該從您的應用程式接收 JWT 令牌。您需要配置 API 以驗證令牌并拒絕不符合您要求的令牌。您可以獲得一些開箱即用的基本驗證 - 令牌必須通過受眾、頒發者和簽名證書驗證 - 但如果您想將其限制為單個身份,那么您需要告訴它那是什么。
有很多方法可以解決這個問題,基于策略的 authz 值得一讀,所以你知道方法(https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies ?view=aspnetcore-6.0)。
您的身份將具有唯一的、不可變的識別符號,即托管身份的 objectId。這會在您的 JWT 令牌上的主題宣告上傳輸,因此您可以使用簡單的全域策略將 API 鎖定到該身份
在您呼叫的 API 啟動中AddAuthorization
,您可以像這樣添加策略
services.AddAuthorization(options =>
{
options.AddPolicy("OnlyMatchingSubject", policy =>
policy.RequireAssertion(context => context.User.HasClaim(c =>
c.Type is ClaimConstants.Sub && c.Value == "your-unique-subject-guid")));
options.DefaultPolicy = options.GetPolicy("OnlyMatchingSubject");
});
在這里,我們說您的令牌必須有一個子宣告,并且它必須是一個要傳遞的特定值(只需objectId
從門戶獲取您的身份),然后將其設為默認身份驗證策略。
這是 dotnet 6 最小 API 的完整示例。
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("OnlyMatchingSubject", policy =>
policy.RequireAssertion(context => context.User.HasClaim(MatchesExpectedSubjectClaim())));
var policy = options.GetPolicy("OnlyMatchingSubject");
options.DefaultPolicy = policy;
options.FallbackPolicy = policy;
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/", () => "Hello World!");
app.Run();
Predicate<Claim> MatchesExpectedSubjectClaim()
{
return c => c.Type is "sub" && c.Value == "your-unique-subject-guid";
}
根據本檔案https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-protected-web-api-app-configuration,您需要在設定中設定 AzureAd 配置#組態檔
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/508244.html
標籤:asp.net 核心 asp.net-core-webapi azure-managed-identity 天蓝色的网络应用程序 天蓝色 api 应用程序
下一篇:WPF-將命令系結到串列框專案?