Azure API应用程序的Azure Active Directory身份验证如何工作?

时间:2015-09-30 10:23:42

标签: authentication azure

我正在尝试调用使用Azure AD身份验证配置的Azure API应用。假设出于此问题的目的,我无法使用Azure SDK并且需要编写代码来获取令牌并将其插入到API请求中。*

我已经确定有两种模式 - “客户端流”和“服务器流”,其中客户端流需要跟踪至少一个重定向到发行者以获取令牌,以及服务器流在哪里服务器为您执行此操作。由于我正在谈论在代码中执行此操作,因此重定向可能会非常繁琐,因此我更倾向于使用一种模式,其中要访问的URI或URI是提前知道并返回内容,而不是重定向。下图说明了网关如何路由所有请求。

API app credential flow

我认为我需要的模式是客户端流程,类似于:

  • 从身份提供商处获取访问令牌(这是什么?如何找到它所在的位置?我必须向IdP发送请求的格式是什么?)
  • 将访问令牌传递给网关(采用何种格式?)
  • 在网关响应中接收另一个令牌
  • 在发出API请求时,在标头中提供此标记(哪个标题?)

我该怎么做? Azure文档没有提供有关其工作原理的详细信息,并希望所有用户只使用SDK,这会隐藏实际发生的事情。

实际的原因是最终需要从BizTalk调用它,它使用WCF WebHttpBinding来调用restful服务。我正在编写自定义行为以将标记头插入请求中,但我需要知道应该如何获取此标记。可以在BizTalk中运行任意代码,但尝试这样做会使解决方案变得复杂,并且使用最小的,松散耦合的代码进行仅配置或大部分配置是更简单的解决方案

1 个答案:

答案 0 :(得分:0)

只是想更好地了解您的场景,因为您将从BizTalk接收管道中使用它,通过启用客户身份验证令牌可以简化场景吗?您在云上托管的API的基本用户名和密码。 BizTalk是否希望使用每个AD用户的令牌自我进行身份验证?

回答您的一些问题

  • 从身份提供商处获取访问令牌(这是什么?如何找到它所在的位置?我必须向IdP发送请求的格式是什么?)
  
    

配置完AD配置后,一旦完成身份验证,我假设您在这里使用ASP.Net,您可以在Thread.CurrentPrincipal上找到有关声明的所有内容,您可以将其转换为ClaimsPrincipal像所以var claimsPrincipal = Thread.CurrentPrincipal作为ClaimsPrincipal;然后你会发现很多关于这个对象的好信息。登录用户的名称,委托人拥有的索赔清单等。我没有在这里探讨过每条途径,但这应该是一个很好的起点。

  

您的API应用程序正在此过程中运行,这意味着您也可以在API应用程序代码中访问这些声明。

我会在BizTalk中构建一个使用Azure SDK进行身份验证并构建此场景的自定义管道,它有点复杂,但是当身份验证因权限问题而失败时,它会让您更好地控制通过管道的内容。上。