我已经使用了下面的word加载项单点登录链接:https://docs.microsoft.com/en-us/office/dev/add-ins/develop/create-sso-office-add-ins-aspnet
但是正如在文档中提到的,插件和API应该在同一个域上,但实际上有两个项目,一个是插件,另一个是API项目,
如示例所示,在API项目中定义了OpenIdConnectCachingSecurityTokenProvider、Startup.Auth
即使我在同一个插件项目中添加了AppStart、Startup.cs和values控制器中的那些文件,也不能正常工作。我是不是漏掉了什么?
在提供示例中,外接程序中当我调用ajax调用url "/api/values“时,它返回404,即没有找到资源,因为外接程序运行在https://localhost:44355上,而http://localhost:33172/上的WebAPI是这样的,因为外接程序的域和webAPI项目是不同的,因为当我创建任何外接程序项目并运行它的外接程序项目时,它会运行IIS Express中显示的两个应用程序。因此,在你的项目中还有两个项目在运行,那么"api/values“将如何调用http://localhost:33172/的webAPI控制器,以及外接程序在另一个域中运行,即https://localhost:44355。
那么,当WebAPI和外接程序域分别运行在不同的urls (如http://localhost:33172/和https://localhost:44355 )上时,它们如何才能相同呢?那么怎么可能是一样的呢?
还有一件事我观察到,当我在word中加载外接程序时运行您的外接程序项目时,调用会进入statrup.cs文件的配置方法和OpenIdConnectCachingSecurityTokenProvider方法,但在我的外接程序调用中不会出现在这些方法中
外接程序如何知道调用API项目的此方法??在我的例子中,即使我正在为方法Office.context.auth.getAccessTokenAsync方法获取令牌,它也没有调用该方法,它是从哪里获得令牌的?
发布于 2018-03-22 00:05:25
正如您自己所指出的,文档中说外接程序和您的Web API必须在同一个完全限定的域中。一个位于localhost:44355,另一个位于localhost:33172。这可能也是您看不到对OpenIdConnectCachingSecurityTokenProvider的调用的原因。
Office.context.auth.getAccessTokenAsync方法正在从Azure Active Directory获取令牌。此内标识授予Word对位于localhost:44355的外接程序的访问权限,但不授予对位于localhost:33172的任何内容的访问权限。
https://stackoverflow.com/questions/49402959
复制相似问题