【问题标题】:AcquireToken() from Background Job来自后台作业的 AcquireToken()
【发布时间】:2015-04-20 04:33:59
【问题描述】:

我正在使用 Azure Active Directory 和 ADAL 通过 OAuth 与 Office 365 的 Exchange EWS 交互。

我知道你可以使用authContext.AcquireToken(),它会为你管理所有的oauth。它将为您保存、使用和刷新令牌,并在需要时提示用户凭据。就我而言,问题是我需要在 Azure 后台 Web 作业中进行交互,因此它无法请求用户凭据。

我尝试获取授权码,使用户访问来自GetAuthorizationRequestURL() 的网址。然后使用AcquireTokenByAuthorizationCode() 获取令牌并将刷新令牌保存在数据库中。因此,当后台 Job 需要连接到 EWS 时,它可以通过 AcquireTokenByRefreshToken() 使用 Refresh Token(保存在 Db 中)。

这种方法有效,但我不知道如何在 14 天后过期时获得新的刷新令牌。

知道如何更新刷新令牌或在后台作业中使用 ADAL 的更好方法吗?

感谢和问候!!

【问题讨论】:

    标签: azure oauth azure-active-directory azure-webjobs adal


    【解决方案1】:

    这里有一个想法。创建一个简单的控制台或 win 表单应用程序来请求您的令牌。在该应用程序中,使用将令牌保存在便携式存储中的自定义缓存(如加密文件,请参阅https://github.com/AzureADSamples/NativeClient-DotNet)。运行应用程序一次以播种缓存。然后获取该缓存并将其与您的 Web 作业一起部署。现在90天左右你会没事的。 另一种选择是使用用户名/密码流,但这很少是一个好主意,它会带来许多重要的限制。

    【讨论】:

    • 关于这个的问题是,该应用程序不仅适合我。我们想要的是用户去网站“授权”访问他们的办公室 365。然后后台工作将每天晚上做一些事情。这就是为什么凭据和 oauth 过程应该在网站中提示但使用令牌是在后台作业中。有什么想法吗?
    • 啊,那很简单。只需在网站和后台作业之间共享令牌缓存。 Acquiretokensilent 确实使用和更新刷新令牌。只需使用github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet 并让控制器中运行的逻辑在您的后台作业中运行。重要的是网站和作业都使用同一个缓存实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多