1

我的应用程序是基于ASP.NET SDK示例微软图表从这里延长访问令牌:https://developer.microsoft.com/en-us/graph/docs/get-started/aspnetmvc如何ASP.NET SDK样品中

我成功打造其管理日历(会议室)的应用程序,但我遇到用户1小时后注销的问题。应用程序基于OpenID,访问令牌的生存期为1小时。我会假设,在SDK样品将自动通过代码波纹管延长访问令牌的使用寿命,所以我不会自我实现刷新令牌:

var cca = new ConfidentialClientApplication(appId, redirectUri, new ClientCredential(appSecret), tokenCache); 
var result = await cca.AcquireTokenSilentAsync(scopes); 

我试图用饼干和身份验证选项玩弄,但我想成功:

var cookieAuthenticationOptions = new CookieAuthenticationOptions(); 
cookieAuthenticationOptions.ExpireTimeSpan = TimeSpan.FromMinutes(90); 
cookieAuthenticationOptions.SlidingExpiration = false; 

new OpenIdConnectAuthenticationOptions{ UseTokenLifetime = true } 

所以基本上我想知道,如何让用户在90天内签署在我的应用程序,使用户不需要进入每一个小时了国书。

  1. 是否有可能做到这一点样品SDK或者我需要手动执行呢?
  2. 如果SDK有可能,我应该改变什么或者如何设置它?

非常感谢您的帮助。

回答

1

正如@Jason Johnston所述SDK本身处理它,但有一件事我们已经发现当我们阅读这篇文章 - Focus on tenants section.

我们大多数用户都有个人甚至组织帐户,因此当它试图刷新令牌时,您必须选择其中一个帐户(当每小时之后通过MS登录页面询问时)。

在更改我们的登录URL以与“组织”租户一起工作之后,不需要其他操作,然后所有刷新都会自动发生,这是我们的inte nded的行为。

0

您无法控制令牌的TTL,但您可以通过请求offline_access scope来获得刷新令牌。刷新令牌的TTL为14天,每次请求刷新时,都会得到一个新令牌一个新的令牌。

虽然不特定于SDK,但我写了一个v2 Endpoint Primer,其中涵盖了此处播放的基本机制,包括刷新标记。

+0

你好,谢谢你的anser ....是的,我有offline_access作用域,但即使我刷新页面(例如通过1分钟的ajax调用),应用程序将在1小时后注销用户:/ ...我不知道我应该在SDK中更改哪些内容,以便用户在1小时后不会注销。 – Jiri

2

从快速查看该示例,它应该工作。刷新令牌是MSAL库的一项任务,而不是Graph SDK。本质上,它的工作方式是样本设置GraphClient每当它发送一个请求时就调用GetUserAccessTokenAsync。该方法从MSAL库中调用AcquireTokenSilentAsync,该MSAL库执行以下操作:

  • 检查令牌缓存中的有效未过期访问令牌。如果它在那里,则返回它。
  • 如果令牌已过期,它将检查是否存在刷新令牌。如果刷新存在,它将使用它来获取新的访问令牌/刷新令牌,缓存新的令牌,然后返回新的访问令牌。

如果没有发生这种情况,我会检查令牌缓存中发生了什么。它看起来像样本使用会话来存储令牌,所以它可能会与您的会话过期。一个更强大的解决方案是将令牌存储在安全的数据库中,但样本倾向于在这里采用简单的路线:)