【问题标题】:IdentityServer 4 or OpenIddict?IdentityServer 4 还是 OpenIddict?
【发布时间】:2017-07-25 11:11:14
【问题描述】:

其中哪一个最容易设置服务器到服务器 JWT?我已经有一个现有的 JWT 令牌,是否需要设置整个服务器才能通过令牌?

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

【问题讨论】:

  • 您已经有一个 jwt 令牌?当您想在 web-api 中使用它时,为什么不能使用提供该令牌的权限来验证它? Identity Server 可以直接设置并连接到您自己的身份提供程序,并且具有可被您的受保护资源用来验证完整性的中间件 - 如果您需要的话。
  • 我真的不需要内置身份验证,因为我不会为客户提供服务,我是客户..,我的问题是如何将令牌传递给我的请求,在 . net core 对我来说似乎并不简单,我没有得到新的令牌,我没有登录到远程,我可以使用邮递员发送请求就好了,但是像添加标题一样简单发布或获取,应该更容易在文档中找到,万岁依赖注入等等,但实际上它有时会使事情变得比他们需要的更困难。
  • @johnny5 说“Identity Server 4 是有史以来最大的痛苦”,甚至没有提出您的论点听起来有点苛刻,恕我直言。既然 IdSrv 是一个免费的 OSS 项目,为什么不联系项目所有者告诉他们“痛点”如何返工?
  • @webdev8183 请看我问过的这个问题 (stackoverflow.com/q/42121854/1938988)

标签: .net jwt identityserver4 openiddict


【解决方案1】:

您可以设置 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");
    }

【讨论】:

    【解决方案2】:

    如果您已经拥有令牌,则不需要 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>
    

    【讨论】:

    • 实施标准协议(如 OAuth2 或 OpenID Connect)的积极方面之一是威胁模型众所周知。不幸的是,您的自制协议容易受到 XSRF/会话固定攻击,因为没有什么能阻止我,作为一个坏人,创建一个指向 https://other-server.example.com/Account/ 的 HTML 自动发布表单并发送我自己的令牌之一。如果受害者访问我的恶意页面,他将自动使用我自己的帐户登录,如果受害者将个人数据发送到您的网站,可能会导致数据泄露。
    • @Pinpoint 非常感谢您的评论。这是一个非常有效的观点,我没有考虑到这一点。我想这可以通过检查 HTTP Referer 标头以确保它来自受信任的来源来缓解。无论哪种方式,我都希望您发布您对问题的建议解决方案的答案。
    【解决方案3】:

    如果您打算使用 .Net 6,则需要考虑 Identity Server 5 的定价模型。

    作为免费的 Identity Server 4,不支持 .Net 6。

    如果您的收入低于 100 万美元,Identity Server 5 的许可证仅对非商业项目和商业项目免费。 并且在许可证中显示,如果您根据该许可证进行制作,则只能免费使用 1 年。

    这是 OpenIddict 的一大优势,因为它是免费的。

    Identity Server 5 pricing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 2019-06-01
      • 2018-04-25
      • 1970-01-01
      • 2018-01-28
      • 2016-09-12
      • 2019-12-18
      • 2020-11-04
      相关资源
      最近更新 更多