代码之家  ›  专栏  ›  技术社区  ›  barii

identityserver4保护公共api

  •  0
  • barii  · 技术社区  · 6 年前

    我使用的是identity server 4,我遵循了教程,所以我有一个api、mvc客户端、控制台客户端和js客户端。

    我也看到了这个博客,很可能是我需要的: https://medium.com/all-technology-feeds/testing-your-asp-net-core-webapi-secured-with-identityserver4-in-postman-97eee976aa16

    我需要的是一个api,在这里客户端可以访问数据,但首先,他们需要身份验证。

    这个例子的唯一问题是,在这两种情况下,客户都知道这个秘密。但是在我们的例子中,多个客户端应该使用相同的api,如果它们都有相同的秘密,那么它们可以代表彼此登录,但我不想拥有不同的秘密。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   Ruard van Elburg    6 年前

    似乎有些混乱。请允许我作一个简短的总结。首先 terminology :

    • A 是使用已注册客户端访问资源的人员。
    • A 是一种从IdentityServer请求令牌的软件,用于验证用户(请求标识令牌)或访问资源(请求访问令牌)。客户端必须先向IdentityServer注册,然后才能请求令牌。
    • 资源 是您希望使用IdentityServer保护的内容—用户的身份数据或API。

    • Client credentials :最简单的授权类型,用于服务器到服务器的通信-始终代表客户端而不是用户请求令牌。


    流,那么你需要一个clientid+秘密。其中秘密是真正的秘密,应该只为客户所知。你不能在这里用同样的秘密。与用户相比似乎是合乎逻辑的,他们也不共享相同的密码。

    但是,客户端不能以用户身份登录。为此,你需要另一个流程,比如 混合的

    本例中的客户端是您的应用程序:console或mvc。第一个仅支持客户端凭据,其中机密是强制的,第二个支持混合流,其中机密可以省略:

    在某些情况下,客户端需要通过 identityserver

    • 在令牌端点请求令牌的机密应用程序(又名客户端)

    为了授予客户端对资源的访问权,您需要在IdentityServer的配置中将作用域添加到客户端。然后允许客户机(而不是必需的)请求授予对资源的访问权的令牌。

    同样,Api与身份验证无关。它也不绑定到一个客户机。多个客户端可以访问资源。您所要做的就是将作用域添加到应该有权访问资源的每个客户端。

    所以客户和资源知道他们的秘密并没有什么不好的。你不需要改变什么。你所要做的就是选择合适的流程。