msal4j获取刷新\u令牌并访问\u令牌以保存,而不是每次都向用户请求权限

js4nwp54  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(353)

我目前正在努力实现ms-graph-api调用来访问微软的一些信息。我对日历特别感兴趣。如果能够添加一些事件并删除它们或扫描这些事件,那就太好了。这个用例的api非常清晰,甚至有些直观。
我能够追溯到一些我正在寻找的东西,我已经在代码中看到了,但它不是一个可行的解决方案,所以从来没有。
https://github.com/azuread/microsoft-authentication-library-for-java/issues/228
微软员工善意地告知,他们的计划中没有这样的主流。我已经成功地获得了这个授权代码并以编程方式调用api,但是每次令牌过期(大约一个小时左右)时,用户都要用ms oauth重新验证自己,这将是一件非常痛苦的事情。我想,这样一个科技巨头必须有一些可以对程序员友好的东西。
还有什么我可以用的吗?

7jmck4yq

7jmck4yq1#

如果使用msal获取令牌,刷新令牌将存储在未公开的缓存中。我们可以用 acquireTokenSilently ,请参见此处的代码。

SilentParameters parameters = SilentParameters.builder(
            Collections.singleton("User.ReadBasic.All"),
            result.account()).build();

    CompletableFuture<IAuthenticationResult> future = app.acquireTokenSilently(parameters);
    IAuthenticationResult updatedResult = future.get();

如果您想直接获取刷新令牌,如文档所示,msal不支持它,adal4j将支持它。
在adal4j中,刷新令牌是公开的——这允许开发人员缓存它们。然后他们会使用 AcquireTokenByRefreshToken() 启用解决方案,例如实现在用户不再连接时代表用户刷新 Jmeter 板的长时间运行服务。
出于安全原因,msal for java不公开刷新令牌。相反,msal为您处理刷新令牌。
msalforjava有一个api,允许您将使用adal4j获得的刷新令牌迁移到clientapplication:acquiretoken(refreshtTokenParameters)中。使用此方法,可以提供以前使用的刷新令牌以及所需的任何作用域(资源)。刷新令牌将被交换为一个新令牌,并被缓存以供应用程序使用。

相关问题