对 Graph Api 使用用户名-密码流是不是安全?此流是不是属于 Oauth 实现

Posted

技术标签:

【中文标题】对 Graph Api 使用用户名-密码流是不是安全?此流是不是属于 Oauth 实现【英文标题】:Is it safe to use username-password flow for Graph Api and Does this flow comes under Oauth implementation对 Graph Api 使用用户名-密码流是否安全?此流是否属于 Oauth 实现 【发布时间】:2020-02-20 07:10:12 【问题描述】:

我们正在尝试从 EWS 迁移到 Microsoft graph api,因为 Microsoft 从 10 月起将不再支持基本身份验证。在浏览 Microsoft azure 的几个在线示例时,我在 git 位置下方遇到了。

https://github.com/Azure-Samples/ms-identity-java-desktop/tree/master/Username-Password-Flow

如果我迁移我们的 Web 应用程序以使用上述方法,或者我在我们的案例中使用了错误的流程,可以吗? 用户名密码流程是否属于 Microsoft Oauth

【问题讨论】:

【参考方案1】:

我们建议您将应用程序转移到 OAuth 流程,而不是在其中添加用户名和密码。不幸的是,该示例被称为此示例,因为它实际上使用的是 OAuth。否则,您将遇到的主要用户体验问题是任何启用多因素身份验证的用户都将无法工作。

我们在此处https://developer.microsoft.com/en-us/graph/get-started/java 提供了一些针对 Microsoft Graph 的 JAVA 入门教程,您可以使用这些教程来调用 Exchange API 来替换您的 EWS API 调用。

【讨论】:

问题是所有上述实现都是一种后端。我们尝试将用户的 Office 365 日历事件与我们工具的日历同步。他/她将在一个地方输入他/她的 Office 365 帐户的详细信息,并在午夜时分在后端尝试连接到 Office 365 帐户的日历并同步数据。在这种不需要用户登录的情况下,我们应该怎么做? 对于您的方案,您需要应用程序权限(仅限应用程序)。这将要求您的 Azure AD 管理员管理员同意此权限。这样一来,您就可以将所有用户的日历作为您的应用程序进行迭代,而无需让每个用户都同意。 有一个很好的学习路径来理解这个docs.microsoft.com/en-us/learn/paths/m365-msgraph-associate 感谢@Jeremy Thake MSFT 的帮助。是否有任何关于 Adminconsent 如何在 java 中工作的教程/工作示例? 我展示的入门页面上的教程将引导您完成它。然后,您只需选择需要管理员同意的权限,例如 Group.ReadWrite.All 即可访问团队中的计划或消息。当您处于委派流程中时,它会提示您,如果他们是管理员,您可以立即同意。否则它会请求管理员批准权限。

以上是关于对 Graph Api 使用用户名-密码流是不是安全?此流是不是属于 Oauth 实现的主要内容,如果未能解决你的问题,请参考以下文章

使用新的 Graph API,是不是可以访问有关所有组用户的信息?

如何确定用户是不是已使用 Graph API 从 Facebook iOS 注销?

身份服务器刷新令牌资源所有者密码凭证流

Facebook graph api 获取用户信息

Facebook API/PHP - 是不是可以通过 FB Graph API 更改用户的个人资料图片?

无法根据访问令牌对用户进行身份验证 - MS Graph API C#