【问题标题】:Correct authorization strategy using Azure AD to secure a CLI to REST API使用 Azure AD 正确授权策略以保护 CLI 到 REST API
【发布时间】:2019-08-05 03:44:35
【问题描述】:

我正在尝试为调用 REST api (Java/JAX-RS) 以执行数据库操作等的后台 CLI 工具 (NodeJS) 实现安全性。 由于我们对所有用户帐户都使用 Azure AD,因此我想用它来验证我们的用户并进行授权。

需要授权,因为并非 AD 的所有成员都应该使用 CLI,并且有两种类型的 CLI 用户具有不同的可用命令集,这意味着即使您能够使用它,根据您是操作员还是管理员,某些功能可能会被锁定。

我已经设法在 Azure AD 中创建了两个应用程序,一个用于 CLI,一个用于 API。我可以使用我们的 AD 凭据登录,为请求 REST API 资源的 CLI 应用程序 ID 获取访问令牌。在客户端,我使用的是 https://www.npmjs.com/package/simple-oauth2 。 在 Java 方面,令牌是根据 Microsoft 公钥验证的,所以一切似乎都正常。

但是,我应该如何将用户锁定为操作员或管理员角色?我能想到的一种天真的方法是在 REST API 中建立用户/角色关联,并且只使用 OAuth 流来验证用户。但我想这就是 AD 的用途......在这种情况下,OAuth 范围可以帮助我吗? 或者,一旦 REST API 收到访问令牌并知道最终用户身份,它是否应该调用 AD 来查询用户组成员资格?

提前致谢!

【问题讨论】:

    标签: oauth-2.0 jwt azure-active-directory


    【解决方案1】:

    使用应用程序角色

    在这里您会找到很好的说明什么是应用程序角色以及如何处理它们:

    https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

    最后推荐的资源也非常有用,将指导您完成整个过程。

    另外,在开发 CLI 时,建议使用设备流 - described heresample code (.net core) here

    【讨论】:

    • 注意必须在 API 中检查角色。 CLI 也可以查看它们,但确实需要在 API 中进行检查,因为 CLI 运行在用户的机器上。
    • 当然,它们必须在 API 中进行检查......它们作为令牌中的声明......
    • 这正是我在实验时找到的解决方案。遗憾的是 Azure 门户没有用于创建角色的 UI,那么我可能会更早发现它们。对于登录,我打算运行一个简单的快速服务器作为 CLI 的一部分来处理重定向,并简单地打开一个浏览器到登录页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2020-02-25
    • 1970-01-01
    • 2021-06-11
    • 2019-11-27
    相关资源
    最近更新 更多