关于java:Microsoft Graph身份验证-委托权限

Microsoft Graph Authentication - Delegated permission

我可以使用"获取访问权限"来从Microsoft Graph访问资源,而无需用户。但是,此方法不允许我访问需要委派权限的资源。

我还尝试使用一种代表用户的方法来获取访问权限,但这将要求我的用户通过网页登录,这在我的情况下是不希望的。

是否可以生成使用寿命很长(可能超过一年)的授权代码,并使用该代码来请求访问令牌,然后可以使用该访问令牌来获取需要委派权限的资源?

注意:我知道生成具有如此长使用寿命的授权代码不是一个好主意,但是后端程序将使用该代码来访问资源,而不是用户。因此,我不希望用户登录页面弹出。希望在Java中实现。

谢谢!


为了使用委派权限,最终用户需要通过OAuth2.0流进行交互式登录。

现在,您可以将用户的凭据与资源所有者凭据流一起使用,该流程只是将用户名/密码发布到Azure AD并获取令牌。不建议使用此路径,因为该路径比较脆弱(例如,MFA无法使用),并且需要您的应用来管理用户的凭据。

您最好的选择是为您的用户创造一种登录体验,使他们能够登录并同意您的应用程序。 Azure AD中的刷新令牌的生存期一直到被撤销为止,这意味着它们可以持续长达一年甚至更长的时间。您遇到的瓶颈是最终用户的密码到期,这将导致他们需要再次登录。

有关此的一些帮助,Azure AD具有可以使用的ADAL4j库。我还为使用第3方库的Azure AD v2.0终结点(Microsoft帐户Azure AD帐户)编写了一个小的Spring MVC Java代码示例。