使用OWIN和WsFederation对MVC、web api和signalR应用进行身份验证



对于我的公司,我必须做一个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);
                    }
                }
            });

相关内容

最新更新