我已使用Azure Rest API / OAuth 2流程为我的应用程序设置了身份验证,遵循此处列出的步骤:
specifying different return values for multiple calls
我在Azure中创建了一个ActiveDirectory应用程序,该应用程序链接到ActiveDirectory实例。
在我自己的应用程序中,我已将其配置为发布到以下Azure OAuth端点:
someuser@<myDomain>.com
一切正常。我可以使用
形式的电子邮件对我的ActiveDirectory进行身份验证randomUser@hotmail.com
但是,我已经意识到我还可以使用任何有效的微软电子邮件地址进行身份验证,这显然意味着拥有有效微软电子邮件的任何人都可以为我的应用程序获取访问令牌,例如
someuser@<myDomain>.com
有谁能告诉我如何限制身份验证以仅允许我的Active目录中的用户?使用表单
的电子邮件的用户Panel
我查看了文档但到目前为止没有运气。
答案 0 :(得分:1)
令牌验证机制
这是什么意思:验证令牌?它归结为三件事,真的:
您的问题是您没有进行3号验证。
在您验证令牌的应用程序中,您可能遗漏了类似的内容:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = ConfigurationManager.AppSettings["ida:Audience"],
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
});
答案 1 :(得分:1)
目前我遇到了同样的问题并试图找出解决方案。 这就是我发现的:
验证后,您将获得JSON Web令牌(请参阅此页https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx)。解码后,有几个可用的信息。但我不确定哪些可能确保只允许登录指定的Active Directory。
@Aram指的是值受众群体(aud
)和租户(tid
)。遗憾的是,受众群体始终设置为请求时提供的app_id,并且租户始终设置为Azure租户的租户ID,例如,您使用的是live.com帐户。
最后,我提出了检查Azure AD中用户对象的oid
(»对象标识符(ID)是否存在的想法。«,https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx)。我希望只有在用户是发布授权的Active Directory的一部分时才会设置此项。
因此,我将我的应用设置为执行以下操作:如果在访问令牌响应的id_token
的已解码版本中,则没有oid
属性set - 登录请求将被拒绝。
问题是:我无法确认我的方法是否有效,因为我没有第二个Azure AD并且无法检查是否只有live / hotmail / ...用户将不会被{ {1}},还有来自不同广告的用户。也许@bobbyr你可以试试并报告吗?
答案 2 :(得分:0)
感谢Thomas Ebert的提示,我找到了解决问题的方法。我不知道它是否会对其他人有所帮助,但是......
基本上,当我的应用程序从Azure获取令牌之前,在将其传递给客户端之前,我可以解码JWT并查看email
字段。
在我的情况下,如果电子邮件地址不属于我的域名,我可以将401未经授权的邮件发送回客户端。
Azure并没有通过配置提供某种方式来做到这一点感觉很奇怪,也许确实如此,但是没有人为我解答这个问题,而且我现在已经阅读了足够多的文档想要拉我自己的眼睛,所以我再也没有看到Azure
这个词......