我在Azure的应用服务上运行了NodeJS应用。它由真人使用,并使用Active Directory身份验证:
目前,未经过身份验证的请求会重定向到Active Directly登录页面。它工作得很好。
但是,我现在要求另一个应用程序(而不是人类)能够访问某些API端点 - 可能是通过某种令牌身份验证。
我认为这样做的选择是:
使用内置的Azure内容。有一个示例here如何让客户端Azure应用程序对另一个进行身份验证,但我不认为这对我有用,因为我的客户端应用程序不是Azure应用程序。所以,我需要任何东西 - 例如curl
请求 - 才能对我的应用进行身份验证。我在这儿吗? azure是否内置了“非Azure应用程序以使用Azure应用程序进行身份验证”?
我可以在上面的屏幕截图中选择“允许匿名请求(无操作)”选项,然后自己处理:实现api_tokens表,对于每个请求,检查API令牌是否为client_api/*
端点,检查任何其他端点的Active Directory身份验证用户,如果未经过身份验证,请自行将其重定向到登录页面。
理想情况下,我可以说:如果请求是client_api/*
然后允许未经身份验证的请求,并且我会检查请求是否包含有效令牌,但是对于所有其他请求,请按照您的要求执行操作现在 - 使用Active Directory身份验证并自动将未经身份验证的请求重定向到登录页面。
所以我的问题是: - 我是对的,auzure没有任何选择1)为我工作? - 有没有办法做选项3)? - 如果没有,我想这留下了选项2) - 或者有没有更好的方式我没想到?
答案 0 :(得分:1)
我们已经完成了与您的1)选项类似的操作,好消息是您的客户端(调用API)不必在Azure中托管。
我们有一个自定义CRM插件需要调用Azure AD保护API APP的调用,这个过程相当冗长,但它可以工作(我们很久以前就设置了它,所以我认为以下步骤是正确的):
创建自己在Azure中托管的API,并确保它作为应用程序在Azure AD中注册(在Azure AD中 - >门户中的应用程序注册)
然后在Azure AD中创建一个新应用程序,将其称为“客户端AD应用程序”,并设置基本属性和密钥等。
实际上,从现在起,您的客户端API将充当“客户端AD应用程序”。
然后,您需要通过为受保护的API分配委派权限,从“客户端AD应用程序”授予对API的访问权限(同样,只需在Azure AD中的UI中执行此操作)。你这样做是通过将“elegate权限”分配给新的“客户端AD应用程序”应用程序(这对我来说不直观)
一旦您设置了2个应用程序并分配了权限,您就需要调用OAUTH API端点来获取令牌,然后在后续API调用中使用该令牌。
这里记录的大部分内容如下: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code
编辑: -
举个例子,我们对oauth端点的调用如下所示:
发送POST请求到: https://login.windows.net/[tennant]/oauth2/token 标题:
这会给你一个如下的回复:
{
"token_type": "Bearer",
"scope": "user_impersonation",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "XXX",
"not_before": "XXX",
"resource": "...the resource you asked for...",
"access_token": "...",
"refresh_token": "..."
}
希望有助于交配。