【问题标题】:Use delegated permissions on a daemon using Microsoft Graph在使用 Microsoft Graph 的守护程序上使用委派权限
【发布时间】:2017-08-31 13:28:20
【问题描述】:

我正在尝试通过 OAUTH2 身份验证使用 Microsoft Graph API,但是我正在努力弄清楚如何使用委派权限而不要求用户登录。

我很高兴自己验证应用程序一次,但这将在守护程序/服务上运行,不会通过用户进行交互。因此,我不能使用 Microsoft 描述委派权限的方式,因为它首先使用 /authorize,然后可以调用 /token。

我知道您可以为 /token 使用密钥,但似乎只使用应用程序权限而不是委托 - 这是我可以访问的。

有没有一种方法可以像我是用户一样使用委托权限进行身份验证,但用户不必每次都使用登录页面?

【问题讨论】:

    标签: oauth-2.0 microsoft-graph-api


    【解决方案1】:

    这是不可能的。术语“委托”在这里非常有意,因为它意味着“用户已将他们的权限委托给您的应用程序,因此您可以代表 那个 用户进行操作”。未委派应用程序权限,因为上下文中没有 user 可将其访问权限委派给您。

    Microsoft Graph 的大部分功能都适用于应用程序和委托范围,因此在许多情况下,您仍然可以执行相同的场景。有一些注意事项,例如使用简写 /me,当没有用户身份验证时,它不存在(相反,您需要使用 /users[{id}])。但是,在某些情况下,没有等效的应用程序范围,并且会定期查看这些情况以缩小差距。

    【讨论】:

    • 因此,由于应用程序权限需要管理员批准并授予对所有项目的访问权限(不适合大型 AD),如果我已为应用程序设置委派权限但仍使用 API 令牌方法,我将能够使用 /users[{id}] 但只是为了我的用户有权使用的东西?
    • 如果您请求了需要管理员同意的委派权限(即User.Read.All)并且您已收到管理员的同意,那么可以。一旦 user 通过 OAUTH,他们将有权执行对 /me 和 /users{someone-other-than me 端点的调用。他们仍然无法执行他们原本不会执行的功能(即,如果 user 无法正常编辑其他 users 而您的应用也无法编辑其他users)。
    • 而且没有办法只使用管理员没有用户通过应用程序的 UI 登录的所有应用程序权限?
    • 您不能在没有用户的情况下使用委派权限,但大多数 All 范围具有应用程序等效项。例如,有一个 Delegated User.Read.All 和一个 Application User.Read.All 范围。 非常风险范围有一些例外;例如,Directory.AccessAsUser.All仅对使用委托范围的管理员可用。
    【解决方案2】:

    我需要在守护程序应用程序中执行类似操作,但应用程序权限不适用于我需要访问的资源 (Planner)。我能够使用资源所有者密码凭据流程并为服务帐户而不是实际用户提供凭据来完成它。

    https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth-ropc

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2021-04-12
      相关资源
      最近更新 更多