【问题标题】:ADAL - Access Token getting expired after 1 hour and not getting refresh tokenADAL - 访问令牌在 1 小时后过期并且没有获得刷新令牌
【发布时间】:2020-06-07 18:42:45
【问题描述】:

我创建了一个 WFC 应用程序来将数据推送到 Dynamics CRM。 对于 Dynamics CRM 的身份验证,我使用的是应用程序用户(S2S 身份验证),而在 WFC 中,我使用以下代码获取访问令牌:

 string ClientId = "********-542e-440b-b718-69f7826ae60a"; // App Id
 string ClientSecret = "*******Ovm4/00jU?tYT.tw5t6a5@@8n";
 string resource = "https://*****.crm8.dynamics.com";
 ClientCredential clientcred = new ClientCredential(ClientId, ClientSecret);
 var result = authenticationContext.AcquireToken(resource, clientcred);

一切正常,直到 1 小时后我收到 401(未授权)错误,因为访问令牌在 1 小时后过期。

现在我的问题是:-

我可以将访问令牌的寿命延长到 1 小时以上,因为默认情况下 1 小时是 1 小时?

使用上面提到的代码为什么我只获得访问令牌但没有获得刷新令牌? (我们可以用它来刷新我的访问令牌)。 请帮我解决这个问题。

【问题讨论】:

    标签: wcf azure-active-directory dynamics-crm access-token refresh-token


    【解决方案1】:

    您不会获得刷新令牌,因为 ADAL 在内部处理它们。 在这种情况下,你也不需要一个。

    你可以通过再次调用AcquireToken来获得一个新的令牌:

    var result = authenticationContext.AcquireToken(resource, clientcred);
    

    实际上,您可以在每次 HTTP 调用之前调用 AcquireToken。 如果它仍然有效,ADAL 会从其内存缓存中为您提供一个令牌,如果没有,则获取一个新的。

    虽然您使用的是客户端凭据流,但实际上没有返回任何刷新令牌。 因为像这样的客户端应用程序不需要它。 无论如何,您都拥有获取新令牌的所有凭据,刷新令牌只会使这里的流程变得不必要地复杂化。

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2019-05-31
      • 2016-09-28
      • 2021-12-19
      • 2021-10-03
      • 2019-04-07
      • 1970-01-01
      • 2019-03-06
      • 2021-08-25
      相关资源
      最近更新 更多