我们有一个基于 Asp.Net core 构建的 Web 应用程序。它不包含任何配置的身份验证中间件。
我们托管在 Azure 应用服务上,并使用身份验证/授权选项 (EasyAuth) 针对 Azure AD 进行身份验证。
身份验证运行良好 - 我们插入了必要的 header ,并且可以在/.auth/me 中看到经过身份验证的身份。但 HttpContext.User 属性不会被填充。
这是 Asp.Net core 的兼容性问题吗?还是我做错了什么?
最佳答案
我创建了一个自定义中间件来填充 User 属性,直到 Azure 团队解决这个问题。
它从应用服务身份验证中读取 header ,并创建一个将由 [Authorize]
识别的用户,并对 name
拥有声明。
// Azure app service will send the x-ms-client-principal-id when authenticated
app.Use(async (context, next) =>
{
// Create a user on current thread from provided header
if (context.Request.Headers.ContainsKey("X-MS-CLIENT-PRINCIPAL-ID"))
{
// Read headers from Azure
var azureAppServicePrincipalIdHeader = context.Request.Headers["X-MS-CLIENT-PRINCIPAL-ID"][0];
var azureAppServicePrincipalNameHeader = context.Request.Headers["X-MS-CLIENT-PRINCIPAL-NAME"][0];
// Create claims id
var claims = new Claim[] {
new System.Security.Claims.Claim("http://schemas.microsoft.com/identity/claims/objectidentifier", azureAppServicePrincipalIdHeader),
new System.Security.Claims.Claim("name", azureAppServicePrincipalNameHeader)
};
// Set user in current context as claims principal
var identity = new GenericIdentity(azureAppServicePrincipalIdHeader);
identity.AddClaims(claims);
// Set current thread user to identity
context.User = new GenericPrincipal(identity, null);
};
await next.Invoke();
});
关于authentication - 在 Asp.Net Core Web 应用中使用 EasyAuth 对 Azure 应用服务上的 AAD 进行身份验证时,无法填充 ClaimsPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354479/