Asp.net mvc 通过OWIN和WsFederation对MVC、web api和signalR应用程序进行身份验证

Asp.net mvc 通过OWIN和WsFederation对MVC、web api和signalR应用程序进行身份验证,asp.net-mvc,asp.net-web-api,identity,owin,ws-federation,Asp.net Mvc,Asp.net Web Api,Identity,Owin,Ws Federation,对于我的公司,我必须做一个POC来检查我们的项目是否可以使用wsFederation身份验证,该项目有一个MVC应用程序、一些webapi控制器和一些信号集线器,所有这些都在不同的项目中。 我们还希望在客户端应用程序和身份提供商应用程序中使用OWIN身份验证中间件 我首先使用ThinktectureIdentityServerV2作为身份提供者(但我们必须在某个时候开发自己的身份提供者)。 对于MVC应用程序,它非常简单,并且使用SAML2令牌运行良好 但是现在事情变得有点复杂了,因为我希望we

对于我的公司,我必须做一个POC来检查我们的项目是否可以使用wsFederation身份验证,该项目有一个MVC应用程序、一些webapi控制器和一些信号集线器,所有这些都在不同的项目中。 我们还希望在客户端应用程序和身份提供商应用程序中使用OWIN身份验证中间件

我首先使用ThinktectureIdentityServerV2作为身份提供者(但我们必须在某个时候开发自己的身份提供者)。 对于MVC应用程序,它非常简单,并且使用SAML2令牌运行良好

但是现在事情变得有点复杂了,因为我希望web应用程序上经过身份验证的用户能够使用ajax调用从web api应用程序调用控制器方法(记住,这与MVC应用程序不同)。

我读过很多关于授权和actAs代币的书,但我有点迷茫,不知道从哪里开始,也不知道如何开始这部分。另外,我找不到任何关于使用OWIN身份验证的委派的信息

所以我的第一个问题是:有可能做到这一点吗?
然后:有人能给我指出正确的方向吗?

我在做这件事的时候遵循了维托里奥·贝尔托奇的指示

关于它的几个注释,其中说的是JWTSecurityTokenHandler,现在是JWTSecurityTokenHandler。这是一个小的打字错误,但是如果你不知道的话,这是一个释放15分钟的好方法

我也无法使用X509 FindByThumbprint部分。我想我没有正确注册我的本地证书。一旦我明天上班,我会把我必须改变的东西贴出来,以便让它工作

Dominick Baier()还开设了一门关于pluralsight的课程,名为WebApi v2 Security,这门课程很好地讨论了如何注入安全管道,以及如何设置WebApi项目来处理这个问题

作为另一个选项,您可以将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);
                    }
                }
            });
app.UseJwtBearerAuthentication(
新的JWTBeareAuthenticationOptions
{
AuthenticationMode=AuthenticationMode.Active,
AllowedAudients=new[]{ConfigurationSettings.AppSettings[“ida:Realm”]},
IssuerSecurityTokenProviders=新的IIssuerSecurityTokenProvider[]
{ 
新的SymmetriceIsuerSecurityTokenProvider(
ConfigurationSettings.AppSettings[“ida:ValidisUser”],
ConfigurationSettings.AppSettings[“ida:SymmetricKey”])
},
Provider=新的OAuthBeareAuthenticationProvider
{
OnValidateIdentity=上下文=>
{
var identity=context.Ticket.identity;
返回System.Threading.Tasks.Task.FromResult(空);
}
}
});