【问题标题】:How to manage roles and users from API level securely如何从 API 级别安全地管理角色和用户
【发布时间】:2018-01-11 00:37:11
【问题描述】:

我有一个 Angular 应用程序的 API,我们正在使用 Identity Server 4 来编写令牌。 IDS4 在一个单独的项目中,我们在该项目中创建了一些 MVC 视图,以便新用户注册我们创建的位置,然后在控制器中使用 UserManager。计划是我们最终将为不同的项目提供几个单独的 API,但只有 1 个身份服务器来管理它们。

我们遇到的问题是我们需要能够从 API 项目创建用户并修改他们的角色。由于 API 无法访问身份表的 IDS4 数据库,因此处理此问题的最佳方法是什么?我是否将端点添加到 IDS4 项目以授予对 UserManager 的访问权限?这似乎有点冒险,如果我这样做,我该如何保证安全,以便只有合法的 API 项目可以使用它并且它不会打开安全漏洞?

【问题讨论】:

    标签: asp.net-identity identityserver4


    【解决方案1】:

    简短的回答是 - 你可以做到。

    您要用于创建用户的 API 应该是已注册的 IDS 客户端,它将基于 client credentials flow(clientId 和 clientSecret)进行身份验证。

    那么,我猜你有一个可以访问数据库的 API。然后,新的客户端 API 将调用有权访问数据库的 API。具有访问权限的人将受到 IDS 授权的保护。

    当然,您可以在此处为特定操作添加更多安全性,并使用某些自定义属性或授权策略仅允许新 API(而不是所有通过 IDS 授权的调用)使用它们。

    【讨论】:

    • 因此管理员将使用由 IDS4 验证为管理员角色的 API。在 API 调用中,令牌将被读取为管理员角色,但随后在代码中,我想使用 ApiOnly 滚动或其他方式或某种方式将 API 与 API 通信来调用 IDS4 端点。我是否需要编写代码来获取 API 的不记名令牌并手动添加标头,或者是否有更好的方法来做到这一点?我只是想让管理员无法直接访问包装用户管理器和角色的端点,但 API 可以调用它们。
    • 好吧,如果您想在不使用管理员令牌的情况下将 API 与 API 通信 - 那么是的,您需要以某种方式获取调用 API 的令牌。否则你将如何验证呼叫?
    • 好的,我想我需要设置一个 OIDC 客户端类来将令牌作为单例服务进行管理,然后调用它来实现与用户相关的功能。感谢您的帮助
    • 好吧,我并不完全了解您的整个情况,但如果您只需要获取调用 api 的 access_token,您可以使用简单的令牌客户端 - new TokenClient(<ids_tokenendpoint>, <ids_callingApiClientId>, <ids_CallingApiClientSecret)
    • 谢谢,看起来不错。我需要这个的原因是 API 中的管理员可以通过更改角色和内容来执行暂停用户或升级用户等操作。
    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 2011-03-20
    • 2017-08-10
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多