对于我的公司,我必须制作一个POC来检查我们是否可以对我们的项目使用wsFederation身份验证,该项目有一个MVC应用程序,一些webapi控制器和一些signalR集线器,所有这些都在不同的项目中.
我们还希望在客户端应用程序和身份提供商应用程序中使用OWIN身份验证中间件.
我们还希望在客户端应用程序和身份提供商应用程序中使用OWIN身份验证中间件.
我使用Thinktecture Identity Server v2作为身份提供者(但我们必须在某些时候开发自己).
对于MVC应用程序,它非常简单,并且使用SAML2令牌工作正常.
但是现在事情变得有点复杂,因为我希望Web应用程序上的经过身份验证的用户能够使用ajax调用从web api应用程序(与MVC不同,请记住)调用控制器方法.
我已经阅读了许多关于委托和代理令牌的事情,但我有点迷失,不知道在哪里或如何开始这部分.此外,我找不到任何关于使用OWIN身份验证的委派.
所以我的第一个问题是:是否有可能实现这一目标?
然后:有人能指出我正确的方向吗?
解决方法
我正在研究维托里奥·贝尔托奇的指示.
关于它的几个注释,它说的是JWTSecurityTokenHandler,它现在是JwtSecurityTokenHandler.这是一个小错字,但如果你不知道它,它是一个很好的方法,松散15分钟.
我也无法使用X509 FindByThumbprint部分.我认为我没有正确注册本地证书.一旦我明天上班,我会发布我必须改变的内容,以便让它发挥作用.
Dominick Baier(http://leastprivilege.com/)也开设了一个名为WebApi v2 Security的复数课程,该课程讲述了如何注入安全管道并设置web api项目来处理这个问题.
作为另一种选择,您可以将Vittorio使用的TokenValidationHandler类替换为Microsoft.Owin.Security.Jwt包,并在Startup.cs文件中实现以下代码.
app.UseJwtBearerAuthentication( new JwtBearerAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active,AllowedAudiences = new[] { ConfigurationSettings.AppSettings["ida:Realm"] },IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] { new SymmetricKeyIssuerSecurityTokenProvider( ConfigurationSettings.AppSettings["ida:ValidIssuer"],ConfigurationSettings.AppSettings["ida:SymmetricKey"]) },Provider = new OAuthBearerAuthenticationProvider { OnValidateIdentity = context => { var identity = context.Ticket.Identity; return System.Threading.Tasks.Task.FromResult<object>(null); } } });