gpt4 book ai didi

authentication - 在 Asp.Net Core Web 应用中使用 EasyAuth 对 Azure 应用服务上的 AAD 进行身份验证时,无法填充 ClaimsPrincipal

转载 作者:行者123 更新时间:2023-12-02 06:53:19 26 4
gpt4 key购买 nike

我们有一个基于 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/41501612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com