使用OWIN和JWT的WebAPI应用程序

时间:2015-07-07 19:00:57

标签: asp.net asp.net-web-api owin adfs jwt

我有一个前端ASP.NET MVC 5网站,它使用WS-Federation协议通过AD FS 3.0对用户进行身份验证。用户通过ACS登录页面登录,并且一切正常。

我的后端是前端将调用的WebAPI应用程序。它们是单独的域,但两者都应对同一AD FS服务器进行身份验证。不同之处在于我喜欢使用JWT令牌进行身份验证的WebAPI项目。

这是WebAPI初创公司:

var thumbprint = "** omitted on purpose for internet eyes... **";
certificateStore = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
certificateStore.Open(OpenFlags.ReadOnly);
var certificate = certificateStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false)[0];
certificateStore.Close();

var accessTokenFormat = new JwtFormat
(
    // AllowedAudiences:
    new[] { "urn:MySolution.WebAPI" },
    //IssuerSecurityTokenProviders:
    new IIssuerSecurityTokenProvider[] 
    {
        new X509CertificateSecurityTokenProvider("https://myAdfsServer.com/adfs/oauth2/", certificate)
    }
);

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
    AccessTokenFormat = accessTokenFormat
});

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    AuthenticationMode = AuthenticationMode.Active,                     
    AccessTokenFormat = accessTokenFormat
});

我在这里缺少什么?我已经准备好了很多这方面的文章,每一篇文章似乎都很接近,但只是遗漏了一些东西。任何帮助都非常受欢迎。

编辑1:根据我的阅读,JWT不是一种身份验证机制。那么我该如何在WebAPI中验证用户身份呢?在我的场景中,用户已经使用ACS登录在前端进行了身份验证,但后端是由前端调用的,因此AD FS的单点登录不会在这里发挥作用吗?

1 个答案:

答案 0 :(得分:1)

OpenIdConnect用于对用户进行身份验证。 JwtFormat主要用于验证使用OAuthFlow接收的AccessTokens。

浏览这些样本: https://github.com/AzureADSamples

这可能特别有趣: https://github.com/AzureADSamples/WebAPI-ManuallyValidateJwt-DotNet