Azure AD。授权流程是否需要从浏览器调用开始以获取桌面应用程序的授权令牌?

时间:2019-08-07 09:52:16

标签: azure azure-active-directory microsoft-graph

有关背景,请参见: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浏览器来获取授权码,还是有一些编程方法来完成我完全错过的事情?

谢谢。 默里

1 个答案:

答案 0 :(得分:1)

  

是这种情况,然后我需要返回第一步,获取   通过浏览器窗口输入新的授权代码,然后复制并粘贴代码   从网络浏览器的网址中获取并用于第二步?

是的,你是对的。

  

是否有一些编程方法可以完全做到这一点   错过了吗?

是的,资源所有者密码凭证(ROPC)授予流程允许应用程序通过直接处理用户的密码来登录用户。 ROPC flow需要高度的信任度和用户曝光度,仅在无法使用其他更安全的流时才应使用此流。