为 HPC 命令行实用程序找出 (Azure) OAuth2 授权流程
Figuring out an (Azure) OAuth2 authorization flow for HPC command line utilities
我是 Azure/OAuth2 的新手,如果这是一个简单的问题,我深表歉意。虽然我的头在旋转,但我会很感激一些指点。
我正在开发用于高性能计算集群的命令行实用程序。此实用程序需要访问使用 Azure 的 OAuth2 实现保护的 REST API。
我正在努力了解我的客户端实用程序应该如何获取授权代码。我的预期流程如下所示...
- 用户在随机 HPC 节点上获取终端并在命令行上调用客户端
- 客户发现它需要一个新的访问代码
- 客户端生成一个URL供用户访问并打印到终端
- 客户端启动服务器以侦听重定向处的代码 URL
- 用户在他们的本地机器(不是客户端运行正在使用的机器)上打开浏览器并提供凭据
- 客户端通过重定向接收代码,
- 客户端在访问 API.
之前关闭服务器并继续执行其余的 OAuth2 流程
我在第 5 步和第 6 步之间失败了。我在提供凭据后在浏览器中看到 "No reply address is registered for the application"。我认为 Azure 希望我在应用程序注册中指定一个回复地址,以便它可以在客户端生成的 URL 中验证回复地址。问题是,我不能给一个!这就是为什么...
- 仅终端客户端:表示客户端计算机上没有 GUI 浏览器。 IE。不能使用 'localhost' 作为回复地址
- 数以千计的潜在客户端主机:我的客户端可以在我们计算集群中的数千个节点中的任何一个上调用。这使得在应用程序的 Azure 注册中列出所有潜在的重定向 URI 变得不可行。 IE。我不能让用户同意在另一台机器上使用浏览器,因为那样我就必须为我们集群中的每个主机插入和维护一个回复地址!
使用 Azure 是否有可能实现我想要实现的目标?我觉得我的流程要么是错误的,要么是我的用例不受支持。我在 OAuth2 规范中阅读了一些关于 'device flow' 的内容,它看起来可能很有用。但是,我还没有看到任何迹象表明 Azure 支持此功能。
我的下一步是通过具有已知静态 URI 的代理路由所有代码回复。不过,这感觉比我应该做的工作要多得多,所以我想 运行 先通过专家 ;)
想法赞赏!
谢谢,
马克.
对于本机客户端应用程序(如您正在构建的应用程序),您应该使用默认的重定向 URI specified in the documentation。
The redirect_uri of your app, where authentication responses can be sent and received by your app. It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded. For native & mobile apps, you should use the default value of https://login.microsoftonline.com/common/oauth2/nativeclient
.
希望这能解决您的问题!
这听起来有点像 OAuth 设备流程的情况:https://joonasw.net/view/device-code-flow
流动-直升机视角
- App makes HTTP POST to the device code endpoint
- Gets response with:
- User code
- Device code
- Verification URL
- Expiry time
- Polling interval
- Friendly message
- Shows message to user so they can open a browser and go to the verification URL
- App starts polling the token endpoint at the defined polling interval, waits for a 200 OK
- User opens browser, goes to verification URL, enters the user code
- User signs in with their account
- App receives 200 OK with:
- Access token
- Refresh token
- Id token
我的博客文章详细介绍了您需要发出的 HTTP 请求,但其主要目的是允许在无浏览器设备上进行身份验证。
我是 Azure/OAuth2 的新手,如果这是一个简单的问题,我深表歉意。虽然我的头在旋转,但我会很感激一些指点。
我正在开发用于高性能计算集群的命令行实用程序。此实用程序需要访问使用 Azure 的 OAuth2 实现保护的 REST API。
我正在努力了解我的客户端实用程序应该如何获取授权代码。我的预期流程如下所示...
- 用户在随机 HPC 节点上获取终端并在命令行上调用客户端
- 客户发现它需要一个新的访问代码
- 客户端生成一个URL供用户访问并打印到终端
- 客户端启动服务器以侦听重定向处的代码 URL
- 用户在他们的本地机器(不是客户端运行正在使用的机器)上打开浏览器并提供凭据
- 客户端通过重定向接收代码,
- 客户端在访问 API. 之前关闭服务器并继续执行其余的 OAuth2 流程
我在第 5 步和第 6 步之间失败了。我在提供凭据后在浏览器中看到 "No reply address is registered for the application"。我认为 Azure 希望我在应用程序注册中指定一个回复地址,以便它可以在客户端生成的 URL 中验证回复地址。问题是,我不能给一个!这就是为什么...
- 仅终端客户端:表示客户端计算机上没有 GUI 浏览器。 IE。不能使用 'localhost' 作为回复地址
- 数以千计的潜在客户端主机:我的客户端可以在我们计算集群中的数千个节点中的任何一个上调用。这使得在应用程序的 Azure 注册中列出所有潜在的重定向 URI 变得不可行。 IE。我不能让用户同意在另一台机器上使用浏览器,因为那样我就必须为我们集群中的每个主机插入和维护一个回复地址!
使用 Azure 是否有可能实现我想要实现的目标?我觉得我的流程要么是错误的,要么是我的用例不受支持。我在 OAuth2 规范中阅读了一些关于 'device flow' 的内容,它看起来可能很有用。但是,我还没有看到任何迹象表明 Azure 支持此功能。
我的下一步是通过具有已知静态 URI 的代理路由所有代码回复。不过,这感觉比我应该做的工作要多得多,所以我想 运行 先通过专家 ;)
想法赞赏!
谢谢,
马克.
对于本机客户端应用程序(如您正在构建的应用程序),您应该使用默认的重定向 URI specified in the documentation。
The redirect_uri of your app, where authentication responses can be sent and received by your app. It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded. For native & mobile apps, you should use the default value of
https://login.microsoftonline.com/common/oauth2/nativeclient
.
希望这能解决您的问题!
这听起来有点像 OAuth 设备流程的情况:https://joonasw.net/view/device-code-flow
流动-直升机视角
- App makes HTTP POST to the device code endpoint
- Gets response with:
- User code
- Device code
- Verification URL
- Expiry time
- Polling interval
- Friendly message
- Shows message to user so they can open a browser and go to the verification URL
- App starts polling the token endpoint at the defined polling interval, waits for a 200 OK
- User opens browser, goes to verification URL, enters the user code
- User signs in with their account
- App receives 200 OK with:
- Access token
- Refresh token
- Id token
我的博客文章详细介绍了您需要发出的 HTTP 请求,但其主要目的是允许在无浏览器设备上进行身份验证。