开源的Owin 的身份验证支持 和跨域支持
http://identitymodel.codeplex.com/
https://identityserver.github.io/
Windows Identity Foundation
6.1.7600.16394
Windows Identity Foundation enables .NET developers to externalize identity logic from their application, improving developer productivity, enhancing application security, and enabling interoperable federation. Enjoy greater productivity, applying the same tools and programming model to build on-premises software as well as cloud services. Create more secure applications by reducing custom implementations and using a single simplified identity model based on claims. Enjoy greater flexibility in application deployment through interoperability based on industry standard protocols, allowing applications and identity infrastructure services to communicate via claims.
To install Windows Identity Foundation, run the following command in the Package Manager Console
CORS support in WebAPI, MVC and IIS with Thinktecture.IdentityModel
My second contribution to the Thinktecture.IdentityModel security library is a full-featured CORS implementation. Many other sample implementations only emit the Access-Control-Allow-Origin header, but there’s more to it than that. The implementation in Thinktecture.IdentityModel follows the W3C Working Draft 3 from April 2012. There is a rich configuration API to control the various settings that are involved with CORS. These settings include which resource you want to configure, which origins are allowed, which HTTP methods are allowed, which request and/or response headers are allowed and are cookies allowed.
In this first release there is support for WebAPI, ASP.NET MVC and IIS. For WebAPI you configure your settings per controller. For MVC you can configure the settings per controller or for specific controller actions. For IIS you configure the settings per URL. If there’s enough interest, then perhaps in a future version I can add support for WCF REST and WCF Data Services.
I won’t bother explaining CORS since there are already enough posts on it elsewhere. Instead I’ll just show how to get started with the library. First, reference the NuGet package. Next, depending on the type of application (WebAPI, MVC or IIS) you need to configure how you want CORS support. Below shows each of the different environments:
WebAPI
In WebAPI the implementation is a delegating handler. This allows the CORS settings to be global or per-route (which is forthcoming post-RC). For example if you were to configure it globally then in global.asax‘s Application_Start you would have a call out to the configuration class passing the global HttpConfiguration object (this follows the new style of factoring out configuration to separate classes in the App_Start folder):
|
1
2
3
4
5
6
|
protected void Application_Start(){ ... CorsConfig.RegisterCors(GlobalConfiguration.Configuration);} |
And then in App_Start/CorsConfig.cs:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class CorsConfig{ public static void RegisterCors(HttpConfiguration httpConfig) { WebApiCorsConfiguration corsConfig = newWebApiCorsConfiguration(); // this adds the CorsMessageHandler to the HttpConfiguration's // MessageHandlers collection corsConfig.RegisterGlobal(httpConfig); // this allow all CORS requests to the Products controller // from the http://foo.com origin. corsConfig .ForResources("Products") .ForOrigins("http://foo.com") .AllowAll(); }} |
In WebAPI resources are identified by the controller name as in the above example for the“Products” controller.
MVC
In MVC you need to register a HttpModule to enable CORS support, so in web.config:
|
1
2
3
4
5
6
|
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="MvcCorsHttpModule" type="Thinktecture.IdentityModel.Http.Cors.Mvc.MvcCorsHttpModule"/> </modules></system.webServer> |
And then again in global.asax you would configure the settings:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
protected void Application_Start(){ ... RegisterCors(MvcCorsConfiguration.Configuration);}private void RegisterCors(MvcCorsConfiguration corsConfig){ corsConfig .ForResources("Products.GetProducts") .ForOrigins("http://foo.com") .AllowAll();} |
In MVC resources can either be identified just by the controller name (with just “Controller” for the resource name) or by the controller and action (as with the above sample with the“Controller.Action” syntax).
IIS
In IIS you need to register a HttpModule (different than the one for MVC), so in web.config:
|
1
2
3
4
5
6
|
<system.webServer> <modules> <add name="CorsHttpModule" type="Thinktecture.IdentityModel.Http.Cors.IIS.CorsHttpModule"/> </modules></system.webServer> |
And then again in global.asax you would configure the settings:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
protected void Application_Start(object sender, EventArgs e){ ... ConfigureCors(UrlBasedCorsConfiguration.Configuration);}void ConfigureCors(CorsConfiguration corsConfig){ corsConfig .ForResources("~/Handler1.ashx") .ForOrigins("http://foo.com", "http://bar.com") .AllowAll();} |
In IIS resources are identified by the application relative path (thus the “~/path/resource”syntax).
Other Configuration Options
While the above samples show a minimal amount of code to get CORS enabled and running in your app, these are some of the least restrictive settings. Typically more thought should go into the settings and so there is a rich API for configuring the various CORS settings. Here are some more examples:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
public static void ConfigureCors(CorsConfiguration corsConfig){ // this allows http://foo.com to do GET or POST on Values1 controller corsConfig .ForResources("Values1") .ForOrigins("http://foo.com") .AllowMethods("GET", "POST"); // this allows http://foo.com to do GET and POST, pass cookies and // read the Foo response header on Values2 controller corsConfig .ForResources("Values2") .ForOrigins("http://foo.com") .AllowMethods("GET", "POST") .AllowCookies() .AllowResponseHeaders("Foo"); // this allows http://foo.com and http://foo.com to do GET, POST, // and PUT and pass the Content-Type header to Values3 controller corsConfig .ForResources("Values3") .ForOrigins("http://foo.com", "http://bar.com") .AllowMethods("GET", "POST", "PUT") .AllowRequestHeaders("Content-Type"); // this allows http://foo.com to use any method, pass cookies, and // pass the Content-Type, Foo and Authorization headers, and read // the Foo response header for Values4 and Values5 controllers corsConfig .ForResources("Values4", "Values5") .ForOrigins("http://foo.com") .AllowAllMethods() .AllowCookies() .AllowRequestHeaders("Content-Type", "Foo", "Authorization") .AllowResponseHeaders("Foo"); // this allows all methods and all request headers (but no cookies) // from all origins to Values6 controller corsConfig .ForResources("Values6") .AllowAllOriginsAllMethodsAndAllRequestHeaders(); // this allows all methods (but no cookies or request headers) // from all origins to Values7 controller corsConfig .ForResources("Values7") .AllowAllOriginsAllMethods(); // this allows all CORS requests from origin http://bar.com // for all resources that have not been explicitly configured corsConfig .ForOrigins("http://bar.com") .AllowAll(); // this allows all CORS requests to all other resources that don’t // have an explicit configuration. This opens them to all origins, all // HTTP methods, all request headers and cookies. This is the API to use // to get started, but it’s a sledgehammer in the sense that *everything* // is wide-open. corsConfig.AllowAll();} |
Of course, feedback is welcome. Enjoy.
Edit: Common configuration issues when enabling CORS on IIS.
开源的Owin 的身份验证支持 和跨域支持的更多相关文章
- 两系统用asp.net forms 身份验证方式实现跨域登录信息共享
1.两个系统的 web.config 都配置为 forms 验证方式( system.web —> authentication 节点) 2.在两个系统的Web.config里配置相同的 sys ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- 浅谈Web Api配合SignalR的跨域支持
最近接手的一个项目中,涉及到一个简单的消息模块,由于之前有简单了解过SignalR,所以打算尝试着摸索摸索~! 首先,通过Nuget管理器添加Microsoft ASP.NET SignalR引用~目 ...
- WebApi 自定义过滤器实现支持AJAX跨域的请求
我想关于此类话题的文章,大家一搜铺天盖地都是,我写此文的目的,只是对自己学习过程的记录,能对需要的朋友有所帮助,也百感荣幸!!!废话不多说,直接上代码! 客户端:很简单的AJAX请求 <html ...
- SpringBoot学习(3)-SpringBoot添加支持CORS跨域访问
SpringBoot学习(3)-SpringBoot添加支持CORS跨域访问 https://blog.csdn.net/yft_android/article/details/80307672
- 支持ajax跨域调用的WCF搭建示例
支持ajax 跨域调用的WCF搭建 1.新建一个"ASP.NET空Web应用程序"项目. 2.新建一个“WCF服务(支持ajax)”. 3.修改WCFAjaxService.svc ...
- SpringMvc跨域支持
SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...
- SpringBoot添加支持CORS跨域访问
原文:https://www.jianshu.com/p/c6ea21b64f6e CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W ...
- 支持JSONP跨域的对象
支持JSONP跨域的对象 1:img 2:iframe 3:link 4:script 为什么,JSONP 最终选择是 script 实现呢?度娘来也! 平常我们进行JSONP请求数据,因为 json ...
随机推荐
- Android ViewPager实现软件的第一次加载的滑动效果
public class MainActivity extends Activity { private ViewPager viewPager; private List<View> V ...
- sql server2008如何创建外键
原文地址:http://blog.csdn.net/zuozuo1245/article/details/8644115 以前创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关 ...
- 求一个数组中第K小的数
面试南大夏令营的同学说被问到了这个问题,我的第一反应是建小顶堆,但是据他说用的是快排的方法说是O(n)的时间复杂度, 但是后来经过我的考证,这个算法在最坏的情况下是O(n^2)的,但是使用堆在一般情况 ...
- HDU-4857(拓扑排序)
Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. ...
- npm 模块安装机制简介
npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一. 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 . $ npm install 本文介绍 npm ...
- URAL 1244
题目大意:给出一个正整数M,给出N个正整数ai,让你在这些数中挑出一些数组成M的一个划分,如果符合条件的划分数超过两个,输出:-1,如果没有输出:0,如果有且仅有一个:则按顺序输出剩下的数的序号. 例 ...
- AddForce给物体添加刚体效果并且脚本增加一个力(按空格实现)
using UnityEngine; using System.Collections; public class CubeAddForce : MonoBehaviour { float hor,v ...
- Java里的接口
Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现. Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现.OOP面向对象的编程,如 ...
- [shell]Shell经常使用特殊符号
符合 含义 && command1 && command2:命令1返回真(命令返回值 $? == 0)后,命令2才干被运行.能够用于if推断. cp 1.txt ../ ...
- JAVA设置环境变量和在DOS下运行java程序
在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...