Ani*_*ani 5 .net c# rest asp.net-mvc-4 asp.net-web-api
基于基于声明的WCF Restful Services认证,我收到了大量文章和SO问题,但我使用MVC Web API开发RESTful服务(不是WCF休息服务)......
那么请您帮助我了解如何使用基于声明的身份验证来保护RESTful服务?
这就是我需要的:
现在,我一直被困在第4点.我们有RESTful服务,但需要实现WIF.
任何人都可以帮我这个.
注意:我不使用WCF Restservice,而是使用MVC Web API
Mik*_*win 11
根据您的描述,听起来您使用的是委托身份模型.也就是说,用户登录到Web应用程序,当Web应用程序调用Web API服务时,它使用当前登录用户的标识.
如果是这种情况,则需要配置WIF以保存"bootstrap令牌".这样做的结果是原始安全令牌可用作当前ClaimsIdentity的属性.然后,您可以使用它将请求的Authorize标头设置为Web API服务调用.
要在.Net 4.5中启用此功能,请将WIF元素上的saveBootstrapContext属性设置为true:
<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
...
Run Code Online (Sandbox Code Playgroud)
对于.Net 4,配置看起来像这样:
<microsoft.identityModel>
<service saveBootstrapTokens="true">
...
Run Code Online (Sandbox Code Playgroud)
然后,要从Web应用程序访问它,您将在要调用Web API的控制器中执行类似的操作(取决于您拥有多少个身份).对于.Net 4.5:
SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapContext;
Run Code Online (Sandbox Code Playgroud)
对于.Net 4:
SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapToken;
Run Code Online (Sandbox Code Playgroud)
获得原始安全令牌后,您现在可以将其作为Authorize标头附加到对Web API的调用.通常,这将附加为承载令牌,这只是一种说法,即您将"bearer"一词附加到标头值的开头.要附加令牌,请执行以下操作:
WebClient request = new WebClient();
request.Headers.Add("Authorization","bearer " + tokenAsString);
Run Code Online (Sandbox Code Playgroud)
注意:通常,您将对传输中的标记值进行加密或base64编码,而不是附加原始字符串,特别是如果它是XML,因为某些框架会破坏传输中的XML.
要将令牌转换为字符串,您应该使用派生自的类 SecurityTokenHandler.标准框架程序集中包含许多这些用于处理某些标准令牌类型的类.对于REST服务,JSON Web Token是一种流行的格式,并且在这里有一个包含处理程序的NuGet包
https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/
如果您正在使用其他一些令牌类型,您可以编写自己的处理程序(实际上并不困难)或尝试在Web上查找.
在.Net 4.5中,SecurityTokenHandler类有一个WriteToken(SecurityToken)方法,将标记作为字符串返回.在早期版本的WIF中,仅支持WriteToken的XML版本.
有几个示例显示如何在服务器端使用SecurityTokenHandler进行REST服务.这是一个很好的例子
http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc/view/Discussions#content
所有相关代码都包含在global.asax.cs文件中.
| 归档时间: |
|
| 查看次数: |
5149 次 |
| 最近记录: |