gpt4 book ai didi

使用 .NET Core 的 Azure Apps EasyAuth 声明

转载 作者:行者123 更新时间:2023-12-02 07:33:58 24 4
gpt4 key购买 nike

我想编写一些 ASP .NET Core 中间件,将 Azure Apps EasyAuth HTTP header 转换为声明。我找到了两种方法:

  1. 解析 EasyAuth 在 HTTP header 中提供的 token 。这似乎不是一个通用的解决方案,因为我必须编写代码来解析每个身份提供者的 token 。

  2. 向/.auth/me 发出服务器端请求。这会返回一些 JSON,我想将其转换为声明,但我不确定是否必须手动执行此操作,或者有框架支持它。

#2 是最好的方法吗?有框架支持吗?

最佳答案

根据你的描述,我找到了类似的issue 。据我所知,目前没有任何框架可以帮助您实现这一目标。根据我的理解,如果您希望在使用 Azure 应用服务 EasyAuth 时检索所有声明,我认为您最好向内置端点 /.auth/me 发出服务器端请求按如下方式检索声明:

Startup.cs > 配置

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];

#region extract claims via call /.auth/me
//invoke /.auth/me
var cookieContainer = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler()
{
CookieContainer = cookieContainer
};
string uriString = $"{context.Request.Scheme}://{context.Request.Host}";
foreach (var c in context.Request.Cookies)
{
cookieContainer.Add(new Uri(uriString), new Cookie(c.Key, c.Value));
}
string jsonResult = string.Empty;
using (HttpClient client = new HttpClient(handler))
{
var res = await client.GetAsync($"{uriString}/.auth/me");
jsonResult = await res.Content.ReadAsStringAsync();
}

//parse json
var obj = JArray.Parse(jsonResult);
string user_id = obj[0]["user_id"].Value<string>(); //user_id

// Create claims id
List<Claim> claims = new List<Claim>();
foreach (var claim in obj[0]["user_claims"])
{
claims.Add(new Claim(claim["typ"].ToString(), claim["val"].ToString()));
}

// Set user in current context as claims principal
var identity = new GenericIdentity(azureAppServicePrincipalIdHeader);
identity.AddClaims(claims);
#endregion

// Set current thread user to identity
context.User = new GenericPrincipal(identity, null);
};

await next.Invoke();
});

关于使用 .NET Core 的 Azure Apps EasyAuth 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42260708/

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