Azure Apps EasyAuth声称使用.NET Core
发布时间:2020-12-16 00:09:35 所属栏目: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 – jQGrid和MVC 3.0 ViewModel
- asp.net-mvc – 如何将Azure AD身份验证用于单独的非Azure
- asp.net-mvc – ASP.NET MVC中的CSS/JS文件的自动版本?
- caching – MVC4 StyleBundle:你能在Debug模式下添加一个缓
- asp.net – .NET OutputCache指令不起作用
- asp.net core 2.0 入门攻略 第二章 Razor Pages项目结构
- asp.net-mvc-3 – 在ASP.NET MVC3中使用pdf.js.
- asp.net-mvc – 具有嵌套视图模型和Knockout的ASP.NET MVC
- 在ASP.Net应用程序和最佳实践中使用WCF
- asp.net – 带有transfer-enconding的POST:在IIS 8.5 Web
推荐文章
站长推荐
- asp.net – 为什么我在Web.Release.config XML-D
- 使用ASP.Net会员提供商忘记密码?
- ASP.NET / VB.NET:Dropdownlist SelectedIndexC
- 【Asp.Net MVC+EF+三层架构】详解(一)初见
- ASP.NET -- WebForm -- HttpResponse 类的方法和
- asp.net-mvc-3 – MVC-Mini-Profiler错误地显示重
- asp.net-core-1.0 – Asp.Net Core 1.0 RTM中Cre
- asp.net – 在.aspx主页中包含内容
- asp.net – 如何在Visual Studio中添加NUnit
- asp.net-mvc – 如何在MVC 4.0 Razor中进行授权
热点阅读