8

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

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

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

我已经阅读了很多关于委派和 actAs 令牌的内容,但我有点迷茫,不知道从哪里或如何开始这部分。另外,我找不到任何有关使用 OWIN 身份验证的委派的信息。

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

4

1 回答 1

1

我在工作时遵循了 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/ ) 还开设了一门名为 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);
                    }
                }
            });
于 2014-07-15T02:26:45.910 回答