在C#REST服务

时间:2016-02-24 15:41:33

标签: c# validation jwt azure-active-directory adal

我有一个Web应用程序,它使用ADAL库通过Azure Active Directory进行身份验证。

此Web应用程序通过将ADAL标记字符串作为参数传递来调用C#REST服务。在我的REST服务中,我想验证此令牌。如果令牌有效,则服务将执行操作。

我搜索了很多但是找不到在我的休息服务中验证JWT令牌的方法。你能帮帮我吗?

1 个答案:

答案 0 :(得分:5)

您有两种选择:

<强> 1。使用OWIN中间件

使用将为您处理令牌验证的中间件。一个常见的案例是OWIN中间件,它为您提供了所有的魔力。通常,这是最好的方法,因为它允许您将代码集中在API的业务逻辑上,而不是低级别的令牌验证。有关使用OWIN的示例REST API,请查看以下两个示例:

<强> 2。手动JWT验证

您可以使用ASP.NET的JSON Web令牌处理程序进行手动JWT令牌验证。 (好吧,所以它不是完全手动的,而是手动调用的。)还有一个示例:

  • https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation(实际的JWT验证发生在Global.asax.cs中,看起来像这样:

    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
    
    TokenValidationParameters validationParameters = new TokenValidationParameters
    {
        ValidAudience = audience,
        ValidIssuer = issuer,
        IssuerSigningTokens = signingTokens,
        CertificateValidator = X509CertificateValidator.None
    };
    
    try
    {
        // Validate token.
        SecurityToken validatedToken = new JwtSecurityToken();
        ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);
    
        // Do other validation things, like making claims available to controller...
    }
    catch (SecurityTokenValidationException)
    {
        // Token validation failed
        HttpResponseMessage response = BuildResponseErrorMessage(HttpStatusCode.Unauthorized);
        return response;
    }