我遵循了本指南:
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的指南时,它也永远不会将密码作为参数。如此处所示:
我知道应该在服务器上设置凭据。在我提供的角度示例中,还有一个ASP.NET服务器
如何从angularJS AD示例为工作台创建有效的承载令牌?我应该用其他东西代替OWIN lib吗?
谢谢
答案 0 :(得分:2)
您有两个选择:
选项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
重要的代码段-
在App\Scripts\app.js
中,将终结点对象的属性名称替换为To Go API
的新位置,在您的情况下为Workbench api url。在App \ Scripts \ toGoListSvc.js中,将apiEndpoint变量替换为相同的值。
选项2-创建支持基于AngularJS的SPA的后端API
AngularJS SPA调用此基于后端服务器的API,然后调用Workbench API。
在此选项中,您可以使用客户端机密并与Delegated permissions
和Application Permissions
一起使用。
仅当您需要使用上面显示的Workbench API的屏幕快照中显示的Administrator
权限时,才需要此选项。
从流程的角度来看,如果不需要使用用户上下文调用Workbench,则可以直接从后端API使用Client Credentials grant flow。如果您需要在用户上下文中拨打电话,请使用On behalf of flow。
由于您要遵循的博客参考仅使用“委派”权限,因此我认为选项1应该不错,但您可以根据自己的要求进一步决定。