有关背景,请参见:this question
因此,授权流程的第一步是使用这样的Web浏览器中的URL获取授权令牌。对于桌面应用程序,它需要具有以下签名(我未对其进行编码以使其更具可读性):
https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize
?client_id={client id}
&response_type=code
&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient
&response_mode=query
&scope=openid offline_access https://graph.microsoft.com/.default
这最终到达指定的redirectURL(假设我在Azure的应用程序注册中设置了相同的redirectUrl并进行了身份验证。一切都很好。响应看起来像这样:
https://login.microsoftonline.com/common/oauth2/nativeclient?code=OAQABAAIAAAA...ggAA
然后使用该代码,通过我的VBA(MS-Access)的POST http请求,使用该代码生成access_token和refresh_token
https://login.microsoftonline.com/{tenant Id}/oauth2/v2.0/token
grant_type=authorization_code
client_id={client id}
scope=https://graph.microsoft.com/.default
redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient
code=OAQABAAIAAAA...ggAA <== ie the code that was copied from the URL in the Authorization step above
该调用会同时返回一个access_token(在1小时后过期)和refresh_token(在90天后默认过期)。 refresh_token用于在过期后获取另一个access_token。
到目前为止,很好。
第一步(获取授权码)在浏览器中运行,然后将生成的代码复制粘贴到我的App中,以用于第二步(获取access_token)。每次access_token过期时,将使用refresh_token获取另一个access_token和另一个refresh_token,这又需要90天。一切正常。
我的问题是这个: 闲置90天后,access_token和最近的refresh_token都将过期。我是否需要返回第一步,通过浏览器窗口获取新的授权码,然后从Web浏览器的URL复制并粘贴代码,然后将其用于第二步?
是否总是需要使用Web浏览器来获取授权码,还是有一些编程方法来完成我完全错过的事情?
谢谢。 默里
答案 0 :(得分:1)
是这种情况,然后我需要返回第一步,获取 通过浏览器窗口输入新的授权代码,然后复制并粘贴代码 从网络浏览器的网址中获取并用于第二步?
是的,你是对的。
是否有一些编程方法可以完全做到这一点 错过了吗?
是的,资源所有者密码凭证(ROPC)授予流程允许应用程序通过直接处理用户的密码来登录用户。 ROPC flow需要高度的信任度和用户曝光度,仅在无法使用其他更安全的流时才应使用此流。