4

我对 Azure/OAuth2 很陌生,如果这是一个简单的问题,我深表歉意。不过,我的头在旋转,我会很感激一些指点。

我正在开发一个用于高性能计算集群的命令行实用程序。此实用程序需要访问使用 Azure 的 OAuth2 实施保护的 REST API。

我正在努力弄清楚我的客户端实用程序应该如何获取身份验证代码。我的预期流程看起来像这样......

  1. 用户在随机 HPC 节点上获取终端并在命令行上调用客户端
  2. 客户发现它需要一个新的访问代码
  3. 客户端生成一个URL供用户访问并打印到终端
  4. 客户端启动服务器以侦听重定向 URL 处的代码
  5. 用户在其本地机器(不是客户端运行的机器)上打开浏览器并提供凭据
  6. 客户端通过重定向接收代码,
  7. 客户端在访问 API 之前关闭服务器并继续 OAuth2 流程的其余部分。

我在第 5 步和第 6 步之间跌倒了。提供凭据后,我在浏览器中看到“没有为应用程序注册回复地址”。我认为 Azure 希望我在应用注册中指定一个回复地址,以便它可以验证客户端生成的 URL 中的回复地址。问题是,我不能给一个可行的!这就是为什么...

  1. 仅终端客户端:表示客户端计算机上没有 GUI 浏览器。IE 不能使用 'localhost' 作为回复地址
  2. 数千个潜在的客户端主机:我的客户端可以在我们计算集群的数千个节点中的任何一个上调用。这使得在应用的 Azure 注册中列出所有潜在的重定向 URI 是不可行的。IE 我不能让用户同意在另一台机器上使用浏览器,因为这样我就必须为集群中的每个主机插入并维护一个回复地址!

我尝试使用 Azure 实现的目标是否可行?我觉得我的流程要么错误,要么我的用例不受支持。我在 OAuth2 规范中阅读了一些关于“设备流程”的信息,看起来它可能很有用。但是,我没有看到 Azure 支持这一点的任何迹象。

我的下一步是通过具有已知静态 URI 的代理路由所有代码回复。不过,这感觉比我应该做的工作要多,所以想先通过专家;)

想法赞赏!

谢谢,

标记。

4

2 回答 2

2

听起来有点像 OAuth 设备流的案例:https ://joonasw.net/view/device-code-flow

流程 - 直升机视图

  • 应用程序向设备代码端点发出 HTTP POST
  • 得到响应:
    • 用户代码
    • 设备代码
    • 验证网址
    • 到期时间
    • 轮询间隔
    • 友情留言
    • 向用户显示消息,以便他们可以打开浏览器并转到验证 URL
  • 应用程序以定义的轮询间隔开始轮询令牌端点,等待 200 OK
  • 用户打开浏览器,转到验证 URL,输入用户代码
  • 用户使用他们的帐户登录
  • 应用程序收到 200 OK:
    • 访问令牌
    • 刷新令牌
    • 标识令牌

我的博客文章详细介绍了您需要发出的 HTTP 请求,但重点是允许在无浏览器设备上进行身份验证。

于 2018-03-02T06:53:59.707 回答
1

对于 Native Client 应用程序(如您正在构建的应用程序),您应该使用文档中指定的默认重定向 URI 。

您的应用程序的 redirect_uri,您的应用程序可以在其中发送和接收身份验证响应。它必须与您在门户中注册的一个 redirect_uris 完全匹配,但它必须是 url 编码的。对于本机和移动应用程序,您应该使用默认值https://login.microsoftonline.com/common/oauth2/nativeclient.

希望这可以解决您的问题!

于 2018-03-01T21:36:52.100 回答