确定HPC命令行实用程序的(Azure)OAuth2授权流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确定HPC命令行实用程序的(Azure)OAuth2授权流程相关的知识,希望对你有一定的参考价值。

我是Azure / OAuth2的新手,如果这是一个简单的问题,请道歉。我的脑袋旋转着,我很欣赏一些指示。

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

我很难理解我的客户端实用程序应如何获取身份验证代码。我想要的流程看起来像这样......

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

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

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

我正在尝试使用Azure实现甚至可能吗?我觉得我的流程错了或我的用例不受支持。我已经阅读了一下OAuth2规范中的“设备流程”,看起来它可能很有用。但是,我没有看到Azure支持这一点的任何迹象。

我的下一步是通过具有已知静态URI的代理路由所有代码回复。这感觉就像我应该做的更多的工作来实现这个工作,所以想先跑过专家;)

赞赏的想法!

谢谢,

标记。

答案

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

流动 - 直升机视图

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

我的博客文章提供了您需要提供的详细HTTP请求,但其主要内容是允许在无浏览器设备上进行身份验证。

另一答案

对于Native Client应用程序(如您正在构建的应用程序),您应该使用默认重定向URI specified in the documentation

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

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

以上是关于确定HPC命令行实用程序的(Azure)OAuth2授权流程的主要内容,如果未能解决你的问题,请参考以下文章

用于向Mountain Lion中的通知中心发送通知的命令行实用程序

Azure HPC Pack 部署必要条件准备

ruby 命令行OAuth2测试程序

针对 Azure OIDC OAuth2 流的 Spring Security

停用 Azure 文件同步

授权命令行工具使用 Google API(通过 OAuth2.0 或其他任何方式)