从有角度的AD客户端获取应用程序的有效承载令牌

时间:2019-02-28 13:40:08

标签: azure azure-active-directory azure-web-sites adal adal.js

我遵循了本指南:

https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp

,我连接成功。我想将不记名令牌发送到我的C#服务器,并用它来调用我的工作台(另一个AD应用程序)函数。

我试图在邮递员电话中使用从角度获得的承载令牌,该令牌未经授权。值得一提的是,我向我的有角度的客户授予了访问我的工作台实例的AD权限,但它仍然无法正常工作,这使我提出了一些问题:

我已尝试使用本指南中的.NET客户端:

http://blog.pomiager.com/post/using-rest-api-in-azure-workbench-blockchain

,并且有效。我在这里注意到,它在AuthenticationContext对象中接收使用客户端ID和客户端密钥的凭据。我注意到在有角度的AD示例中,我们从不使用秘密。但事实是,在authService.js中查看创建自己的工作台UI的指南时,它也永远不会将密码作为参数。如此处所示:

https://github.com/Azure-Samples/blockchain/blob/master/blockchain-development-kit/connect/web/workbench/custom-ux-sample/src/services/authService.js

我知道应该在服务器上设置凭据。在我提供的角度示例中,还有一个ASP.NET服务器

如何从angularJS AD示例为工作台创建有效的承载令牌?我应该用其他东西代替OWIN lib吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您有两个选择:

  1. 选项1-直接从基于AngularJS的SPA调用Workbench API

    在此选项中,您使用Implicit Grant Flow,并且仅通过Delegated Permissions调用Workbench API,即在已登录用户的上下文中。

    还知道AngularJS SPA本身不应该利用任何客户端机密,因为这存在安全风险,使用您的应用程序的任何人都可以从JavaScript代码中提取机密。

    这是Azure Samples中的代码示例。此示例具有TodoSPA(您的AngularJS应用)和ToGoAPI(独立的API,类似于WorkBench API)。因此,您不需要自己托管ToGoAPI,而是假定WorkBench API是您的ToGoAPI。遵循相同的步骤,只是权限名称“ Access To Go API”将有所不同,而您将使用Access Work Bench API

    Call an Azure AD protected Web API in an AngularJS Single Page App

    enter image description here

    重要的代码段-

    App\Scripts\app.js中,将终结点对象的属性名称替换为To Go API的新位置,在您的情况下为Workbench api url。在App \ Scripts \ toGoListSvc.js中,将apiEndpoint变量替换为相同的值。

  2. 选项2-创建支持基于AngularJS的SPA的后端API

    AngularJS SPA调用此基于后端服务器的API,然后调用Workbench API。

    在此选项中,您可以使用客户端机密并与Delegated permissionsApplication Permissions一起使用。

    仅当您需要使用上面显示的Workbench API的屏幕快照中显示的Administrator权限时,才需要此选项。

    从流程的角度来看,如果不需要使用用户上下文调用Workbench,则可以直接从后端API使用Client Credentials grant flow。如果您需要在用户上下文中拨打电话,请使用On behalf of flow


由于您要遵循的博客参考仅使用“委派”权限,因此我认为选项1应该不错,但您可以根据自己的要求进一步决定。