对于我的公司,我必须做一个POC来检查我们是否可以为我们的项目使用wsFederation身份验证,该项目有一个MVC应用程序,一些webapi控制器和一些signalR集线器,所有这些都在不同的项目中。我们还希望在客户端应用程序和身份提供者应用程序中使用OWIN身份验证中间件。
我首先使用Thinktecture Identity Server v2作为身份提供程序(但我们必须在某个时候开发自己的身份提供程序)。对于MVC应用程序,它是非常直接的,它工作得很好,使用SAML2令牌。
但是现在事情变得有点复杂了,因为我希望web应用程序上的认证用户能够从web api应用程序调用控制器方法(这是不同的MVC之一,记住),使用ajax调用。
我读过很多关于委托和actAs令牌的东西,但我有点迷路,不知道从哪里或如何开始这一部分。此外,我找不到任何关于使用OWIN身份验证的委托。
所以我的第一个问题是:这有可能实现吗?然后:有人能给我指个方向吗?
我是按照Vittorio Bertocci的指示做的。
http://www.cloudidentity.com/blog/2013/01/09/using-the-jwt-handler-for-implementing-poor-man-s-delegation-actas/关于它的几个注意事项,它说JWTSecurityTokenHandler,现在它是JWTSecurityTokenHandler。这是一个小错别字,但如果你没有意识到这一点,这是一个浪费15分钟的好方法。
我也不能使用X509 FindByThumbprint部分。我想我没有把我的本地证书注册好。一旦我明天开始工作,我就会发布为了使它工作而必须更改的内容。
Dominick Baier (http://leastprivilege.com/)也在pluralsight上开设了一门名为WebApi v2 Security的课程,该课程很好地讨论了如何注入安全管道并设置web api项目来处理此问题。
作为另一个选项,您可以用Microsoft.Owin.Security.Jwt包替换Vittorio使用的TokenValidationHandler类,并在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);
}
}
});