2017-04-14 147 views
4

我正在使用B2C来保护Asp.Net Core中的WebApi。我的代码如下。我需要验证令牌还是中间件为我执行?我想如果每个人都这样做的话,我会更容易找到一些示例代码,但我似乎无法得到任何真正的方向。在Asp.Net Core Web Api中验证B2C JWT令牌

然而,这B2C documentation指出我的API做验证。

我发现了一个sample但它不是用于Core,而是他们使用的是CertificateValidator = X509CertificateValidator.None。这不是破坏目的吗?而另一个sample here他们这样做。

难道我不需要从B2C获得签名密钥吗?

我可以拼凑出一个解决方案,但我真的需要这样做吗?

在此先感谢。

 app.UseJwtBearerAuthentication(new JwtBearerOptions() 
     { 
      AuthenticationScheme = Constants.B2CAuthenticationSchemeName, 
      AutomaticAuthenticate = false, 
      MetadataAddress = string.Format(
       _identityConfig.B2CInfo.AadInstance, 
       _identityConfig.B2CInfo.Tenant, 
       _identityConfig.B2CInfo.Policies 
        .Where(p => p.IsDefaultSignUpSignInPolicy == true) 
        .First() 
        .Name), 
      Audience = _identityConfig.B2CInfo.ClientId, 
      TokenValidationParameters = new TokenValidationParameters 
      { 
       ValidateLifetime = true, 
       RequireExpirationTime = true, 
       RequireSignedTokens = true, 
      }, 
      Events = new JwtBearerEvents 
      { 
       OnAuthenticationFailed = B2CAuthenticationFailed 
      } 
     }); 
+0

今天我有同样的问题。我一直在尝试在API调用中进行验证。我仍然认为我必须这样做。 – Mukus

回答

4

我需要验证令牌或中间件这样做是为了我吗?

JWT的承载中间件会为你(默认情况下,它会自动拒绝签名或伪造的标记,这样你就不会需要明确设置RequireSignedTokenstrue)。

这不就是目的吗?

使用嵌入在证书中的公开非对称密钥(例如RSA或ECDSA)验证签名并验证证书本身(特别是其链)是有区别的。 ASP.NET Core完全支持签名验证,但尚未支持证书验证。

难道我不必从B2C那里得到签名密钥吗?

JWT承载中间件自动从B2C的发现端点检索它,因此不需要手动执行该操作。欲了解更多信息,请不要犹豫,阅读OIDC发现规范:https://openid.net/specs/openid-connect-discovery-1_0.html

+0

我希望其余的文档与您的解释一样清晰。非常感谢!并感谢您的快速响应。 – nhwilly

+0

@nhwilly我的荣幸(很高兴我能帮忙!) – Pinpoint