我有一个Web应用程序,它将Bearer令牌传递给Web API应用程序。然后该应用程序将要运行的报告排队。根据队列的时长,可能需要10秒或超过一小时,直到该报告开始处理。该报告需要访问使用Azure AD OAuth保护的其他REST资源。
所以流程是
Web Client --- Bearer Token ---> Web API ---> Queue ---> Report Processor --->
Token Acquired With Client Secret with UserAssertion ---> REST Data Source
由于原始承载令牌在60分钟后到期,我需要能够在报告生成的实际时间刷新用户的承载令牌。我是否应该让Web客户端在请求运行报告时传递实际的刷新令牌?
答案 0 :(得分:2)
不应将刷新令牌发送到正常刷新流之外的任何位置。 我建议您在收到传入令牌后立即使用它来触发onbehalfof flow(我假设您将其称为UserAssertion流)。这将为您的后端和刷新令牌提供新的访问令牌。刷新令牌持续14天:当您从队列中选择放入请求时,刷新令牌将允许您获取新的访问令牌。
使用你的符号,你会有
let point = tableView.convertPoint(CGPoint.zero, fromView: sender)
guard let indexPath = tableView.indexPathForRowAtPoint(point) else {
fatalError("can't find point in tableView")
}
如果您在接收请求时和推入队列之前无法执行任何处理,则替代方法是使用应用程序权限 - 这将允许您随时为后端获取令牌。