我正在编写一个应用程序,它将作为反应网站的后端。该网站将由我们的客户使用,但我们将完全控制用户的权限。我们已决定使用Azure AD来保护请求,但也会公开API以供最终用户直接使用。
我的理解是在Azure AD中我将不得不创建一个允许基于Web的隐式身份验证(针对react站点)的应用程序,以及允许基于dameon的应用程序对API进行身份验证的本机应用程序。 / p>
我相信这意味着我的申请中会有两个受众群体。
我试图获得包含群组的声明,我可以看看我是否编辑了azure AD中两个应用程序的元数据以包含"groupMembershipClaims": "SecurityGroup"
我可以获得包含组ID的声明,但是没有名字。
我想我也可以使用appRoles
来设置应用程序使用的角色,但我还没有将其作为JWT中的声明来实现,但我认为它可以是完成后,我需要在每个应用程序上设置角色,然后将用户添加两次,这不是非常理想的。我也认为,因为我的应用是多方面的,外部用户可以使用它来设置自己的权限,这不是我想要做的。
对不起,我只是完全迷失了,而且由于这种情况发生了多大的变化,文档也不会引起混淆!
TLDR:我是否需要在azure广告中配置两个应用程序,如果是这样,最好的方式是设置权限(声明)。 oAuth 2也是正确的选择,或者我应该看看开放的id?
答案 0 :(得分:1)
马上我要解决一个误会。 守护程序应用程序通常必须注册为Web / API,即publicClient:false。 那是因为本机应用程序不能拥有客户机密。 当然守护进程无法在用户的设备上运行。 因为这是一个本机应用程序。在用户设备上运行的应用程序。
我相信这意味着我的申请中会有两个受众群体。
至少你会有两个应用程序。如果需要,后端和React前端可以共享一个应用程序(启用隐式流程)。守护进程需要另外注册。
我正试图获得包括群组的声明,我可以看看我是否编辑了azure AD中两个应用程序的元数据以包含“groupMembershipClaims”:“SecurityGroup”我可以获得包含组ID的声明,但是没有名字。
是的,仅包含ID。如果您需要名称,请转到Graph API来获取它们。但你为什么需要它们呢?用于展示?否则,您需要使用ID来设置权限。名称总是会改变,然后代码就会中断。
我想我也可以使用appRoles来设置应用程序使用的角色,但是我还没有将它作为JWT中的声明来实现,但我认为它可以完成,但是我需要在每个应用程序上设置角色,然后将用户添加两次,这不是很理想。我也认为,因为我的应用是多方面的,外部用户可以使用它来设置自己的权限,这不是我想要做的。
您对多租户方案的想法是正确的。如果你确实想要实现这些,我就它做了一篇文章:https://joonasw.net/view/defining-permissions-and-roles-in-aad。
为什么您需要在多个应用中设置角色?他们不会只在网络应用程序中申请吗? 如果本机应用程序是守护程序,则没有用户。
总的来说,我可以看到你的问题。您有来自其他组织的人员,他们想要访问您的应用程序,但您想要控制他们的访问权限。
老实说,最好的方法可能是在您控制的某个租户中使应用程序成为单租户。然后邀请外部用户作为访客(这里有一个API)。然后,您可以使用组或appRoles为其分配角色。
如果我误解了某些内容,请发表评论,我会解决问题。
答案 1 :(得分:0)
Azure AD当然是一个功能强大的系统,但我发现OAuth方面令人困惑,因为这些方面非常混乱:
与角色相关的答案
这不是我所了解的一个领域 - Juunas似乎是一个帮助你的好人。
OAUTH STANDARDS AND AZURE
我一直在努力寻找基于OAuth博客的教程我写作。也许我学到和写的一些东西对你有用。
AZURE SPA和API代码示例
我的示例演示了如何使用SPA中的隐式流通过Azure AD登录用户,然后如何在自定义API中验证收到的令牌:
不确定这与您的用例有多大关系,但我希望它对技术方面有所帮助......