2017-03-05 721 views
2

其中哪一个最容易设置服务器到服务器的JWT?我是否已经有一个现有的JWT令牌来设置整个服务器来传递令牌?IdentityServer 4或OpenIddict?

我有一个需求用例来为另一台服务器上托管的Web API创建一个客户端,但无法弄清楚如何将.NET Core中的凭据传递给其他服务器,我只需要能够构建一个GET和使用C#的POST到远程服务器API并构建一些图表来显示GET的结果。

+0

你已经有一个jwt令牌?从哪里来,为什么你不能使用提供该标记的权威机构来验证它,当你想在你的web-api中使用它时? Identity Server可以直接设置并挂接到您自己的身份提供商,并拥有可供您的受保护资源使用的中间件来验证完整性 - 如果这是您的需要。 – Mashton

+0

我真的不需要auth,因为我不会为客户提供服务,我是客户..,我的问题是如何将令牌传递给我的请求,在.net核心中这看起来并不简单所有对我来说,我没有得到一个新的令牌,我没有登录到远程,我可以使用邮递员发送请求就好,但是像添加一个标题到一个帖子或获取,应该更容易在文档中找到依赖注入的所有东西,但实际上它有时会让事情变得比他们需要的更困难。 – webdev8183

+6

@ johnny5说“身份服务器4是有史以来最大的痛苦”,甚至没有提出你的论点听起来*有点*苛刻,恕我直言。由于IdSrv是一个免费的OSS项目,为什么不联系项目业主告诉他们“痛点”可以重新修复? – Pinpoint

回答

0

如果你已经有一个令牌,那么你不需要IdentityServer4或OpenIddict。 IdentityServer4和OpenIddict根据请求发布令牌,但您似乎已经在本地发布了它们。

我使用通过HTTPS进行POST的表单将我的令牌从站点A发送到站点B.

<form action="https://other-server.example.com/Account/" method="post" id="form"> 
    <input name="token" type="hidden" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."> 
</form> 

您也可以使用JavaScript自动提交表单。

<script> 
    document.getElementById('form').submit(); 
</script> 
+1

实现标准协议(如OAuth2或OpenID Connect)的积极方面之一是威胁模型通常是众所周知的。不幸的是,您的自制协议很容易受到XSRF /会话固定攻击的影响,因为没有任何东西阻止我作为坏人创建指向“https:// other-server.example.com/Account /”的HTML自动发布表单并且发送我自己的一个令牌。如果受害者访问我的恶意页面,他将自动以我自己的帐户登录,如果受害者将个人数据发送到您的网站,可能会导致数据泄露。 – Pinpoint

+0

@Pinpoint非常感谢您的评论。这是我没有考虑到的一个非常有效的观点。我想这可以通过检查HTTP Referer头来缓解,以确保它来源于可靠的来源。无论哪种方式,我都希望您能针对问题提出解决方案。 – Fred

0

您可以设置一个cookie,然后重定向到一个子域。 这种方法的好处是它可以防止Pinpiont指出的XSRF /会话固定攻击。缺点是两个站点都必须驻留在某个域上。

[RequireHttps] 
    public IActionResult Redirect() 
    { 
     var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; 
     const string domain = "subdomain.example.com"; 

     Response.Cookies.Append("token", token, new CookieOptions { 
      Domain = domain, 
      Expires = DateTime.Now.AddHours(1), 
      HttpOnly = true, 
      Path = new PathString("/Account"), 
      Secure = true, 
     }); 

     return Redirect($"https://{domain}/Account"); 
    } 
相关问题