我有一个本机C#.NET控制台应用程序,客户使用该应用程序从Graph for Office 365中提取用户许可证分配。我已经实现了交互式身份验证和管理员同意,这是有效的。我还需要能够编写应用程序脚本,以便它可以按计划运行,因此需要以非交互方式进行身份验证,并在应用程序运行时提供凭据。
为此,我使用以下电话:
https://login.microsoftonline.com/common/oauth2/token
resource=https%3A%2F%2Fgraph.microsoft.com
&client_id={_clientId}
&grant_type=password
&username={username}
&password={password}
一旦申请被授权给用户或通过管理员同意,这对我的租户起作用。
但对于与我合作的客户而言,这不起作用。 (客户启用了双因素身份验证,因此我不确定这是否会影响它。交互式身份验证适用于他们,但管理员同意,尽管它返回' admin_consent = True' ,似乎没有工作,仍然提示用户授权应用程序,他们不能做,因为他们不是全局管理员,但全局管理员可以自己授权。)
使用Graph for Native应用程序以非交互方式进行身份验证的最佳/正确(官方/非官方)方式是什么。 (到目前为止,我所阅读的所有文档都表示不支持Native应用程序,并推动交互式身份验证。)
非常感谢任何帮助。
由于
加里
答案 0 :(得分:2)
你应该肯定避免使用password
授权。通过存储用户名和密码,您将面临巨大的责任风险。它太容易受到损害了。
对于服务/守护程序方案,您应该使用client_credentials
授权。一旦您收到管理员同意,它将允许您在没有用户参与(或在上下文中)的情况下检索令牌。
可以在以下网址找到相关文档: