Azure Apps EasyAuth声称使用.NET Core
发布时间:2020-05-23 21:27:47 所属栏目:asp.Net 来源:互联网
导读:我想编写一些ASP .NET Core中间件来将Azure Apps EasyAuth HTTP标头转换为声明.我找到了两种方法: 解析EasyAuth在HTTP标头中提供的令牌.这似乎不是一个通用的解决方案,因为我必须编写代码来解析每个身份提供者的令牌. 向/.auth/me提出服务器端请求.这会返回
|
我想编写一些ASP .NET Core中间件来将Azure Apps EasyAuth HTTP标头转换为声明.我找到了两种方法: >解析EasyAuth在HTTP标头中提供的令牌.这似乎不是一个通用的解决方案,因为我必须编写代码来解析每个身份提供者的令牌. #2是最好的方法,是否有任何框架支持? 解决方法根据你的描述,我发现了类似的 issue.据我所知,目前没有任何框架可供你实现.根据我的理解,如果您希望在使用Azure App Service 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();
}); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- asp.net-mvc – 在哪里得到的Microsoft.Web.Mvc.
- asp.net-mvc – 在C#中,我如何从一个字节[]中知道
- .net核心中的ServicePointManager.DefaultConnec
- asp.net-mvc-3 – 模型验证/ ASP.NET MVC 3 – 条
- 更改生成的ASP.Net ID?
- asp.net – 如何添加jQuery UI按钮图标到输入按钮
- asp.net-mvc-3 – MVC3 – 使用ViewModel插入 –
- asp.net – 将url参数添加到asp主题文件夹中的cs
- ViewState在ASP.NET MVC中是否相关?
- asp.net-mvc – ASP.NET MVC – 如何获取一个动作
热点阅读
