如何为自动化测试创建JWT

时间:2017-06-08 13:31:37

标签: c# unit-testing security owin jwt

上下文

我们的项目有一系列独立的http服务,我们一起工作

  1. 身份验证服务
  2. 服务A
  3. 服务B
  4. 服务C
  5. A,B和A的目的C对于这个讨论并不重要。除了他们互相交流。

    身份验证服务是我们对Owin.Identity的实现。服务A首先上线,我们(很可能)没有正确实现安全集成。我们必须实现自己的MachineKeyProtector来保护身份并设置请求上下文主体

    var secureDataFormat = new TicketDataFormat(new MachineKeyProtector());
    var ticket = secureDataFormat.Unprotect(accessToken);
    request.GetRequestContext().Principal = new ClaimsPrincipal(ticket.Identity);
    

    这似乎不正确。我想

    //startup.cs
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    
    //web.config
    //all our services share the same machine key
    <machineKey decryptionKey="..." validationKey="..." validation="SHA1" decryption="AES" />
    

    照顾安全。

    然后出现了自动化测试的问题。我们使用Owin.Testing来模拟HTTP调用并运行集成测试。为了实现这一点,我们需要创建一个JWT,我们目前正在使用此代码

    var ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
    var protected = new MachineKeyProtector().Protect(ticket);
    new TicketDataFormat(protected);
    

    再次使用我们的MachineKeyProtector实施。所有这一切都有效,但似乎并不正确。我会通过Owin.Security.OAuth(或JWT?)为我们处理这个问题。

    我们创建MachineKeyProtector作为为自动化测试生成JWT令牌的方法。

    问题/问题

    1. 如何在不实现我们自己的MachineKeyProtector的情况下生成JWT。我假设我们可以使用JwtTokenizer.Create(new Claims Identity());调用来生成身份验证令牌,但我无法找到它。
    2. 我们如何在服务A,B和&amp;中配置安全性? C所以请求主体是在没有我们明确设置的情况下设置的吗?
    3. 我尝试尽可能简化上下文,同时深入了解我们目前的情况。如果需要更多信息,请询问。

0 个答案:

没有答案