Web services 我的Office加载项中的Javascript位于哪个域
我们有一个在OWA中运行的Outlook加载项Web services 我的Office加载项中的Javascript位于哪个域,web-services,office-js,office-addins,outlook-web-addins,Web Services,Office Js,Office Addins,Outlook Web Addins,我们有一个在OWA中运行的Outlook加载项 舱单在 Javascript位于 我们在内部编写的自定义Web服务位于 当我从JavaScript内部调用以响应外接程序命令时,我使用ajax调用中的格式 我最终得到了一个CORS错误(有时是飞行前的,有时是CORB)。如果Javascript实际上与web服务位于同一个域上,为什么会出现这种情况 我假设我已经通过身份验证,因为我已经登录了Outlook帐户 有什么好处 注: 作为一个实验,我尝试通过直接键入URL(不涉及OWA)进行RESTf
- 舱单在
- Javascript位于
- 我们在内部编写的自定义Web服务位于
var apiUri = '/api/People/ShowRecord';
$.ajax({
url: apiUri,
type: 'POST',
data: JSON.stringify(serviceRequest),
contentType: 'application/json; charset=utf-8',
dataType: 'json'
}).done(function (response) {
if (!response.isError) {
// response to successful call
}
else {
// ...
}
}).fail(function (status) {
// some other response
}).always(function () {
console.log("Completed");
});
观察
当我从地址栏调用api时,下面的代码将运行。Javascript永远不会调用此代码
[assembly: OwinStartup(typeof(EEWService.AuthStartup))]
namespace EEWService
{
public partial class AuthStartup
{
public void Configuration(IAppBuilder app)
{ app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Notifications = new WsFederationAuthenticationNotifications
{
RedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.Whr = "ourdomain.com";
return Task.FromResult(0);
}
},
MetadataAddress = ConfigurationManager.AppSettings["ida:MetadataAddress"],
Wtrealm = ConfigurationManager.AppSettings["ida:Audience"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new string[] { $"spn:{ConfigurationManager.AppSettings["ida:Audience"]}" }
}
});
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
MetadataAddress = ConfigurationManager.AppSettings["ida:MetadataAddress"],
});
}
}
}我认为这有一些问题 第一个问题是,您正试图从为代码提供服务的同一台服务器上提供静态内容。这通常被认为是一种不好的做法,纯粹是因为没有必要为静态内容浪费这些宝贵的服务器资源。理想情况下,您应该将静态内容上载到CDN,并让用户的浏览器向某个超级缓存文件服务器发出请求。但是-我知道您目前可能无法使用此选项。这也不是根本原因 第二个也是真正的问题是,(你认为你是,但是)你没有被认证。Outlook web加载项中的身份验证在默认情况下不会出现,这是您需要处理的事情。当Outlook将web加载项加载到侧面板中时,它会使某些方法对您可用,您可以使用这些方法并在某种程度上创建一个伪身份(例如)-但是如果您想要真正的身份验证,您需要自己进行验证 据我所知,有三种方法可以做到这一点
- 当用户加载你的第一页时,确保像
这样的JS值对他们可用。这会派上用场的window.Unique\u ID
- 在用户界面中有一个按钮,上面写着“验证”
- 当用户单击此按钮时,您将它们弹出到一个url,该url将重定向到您的身份验证url。(差不多)。这将避免您在侧面板中被阻止的麻烦,因为您正在使用
窗口。请使用域中的url打开
。将唯一的_ID传递给重定向,然后重定向到OAuth登录URL。看起来应该是
https://login.microsoftonline.com/......&state=Unique_ID
- 在弹出“用户登录”窗口后,在主JS(客户端)中,打开服务器的web套接字,再次使用该唯一的\u ID并开始侦听
- 当用户完成身份验证时,OAuth流应该发回访问令牌或代码。如果您获得了访问令牌,您可以通过套接字将其发送到前端(使用post back参数中的唯一_ID),或者如果您有代码,您可以通过服务器到服务器调用完成对用户的身份验证,然后以相同的方式传递访问令牌。因此,您可以使用该唯一Id跟踪用户连接的套接字,并将访问令牌仅中继到该用户
我认为这有一些问题 第一个问题是,您正试图从为代码提供服务的同一台服务器上提供静态内容。这通常被认为是一种不好的做法,纯粹是因为没有必要为静态内容浪费这些宝贵的服务器资源。理想情况下,您应该将静态内容上载到CDN,并让用户的浏览器向某个超级缓存文件服务器发出请求。但是-我知道您目前可能无法使用此选项。这也不是根本原因 第二个也是真正的问题是,(你认为你是,但是)你没有被认证。Outlook web加载项中的身份验证在默认情况下不会出现,这是您需要处理的事情。当Outlook将web加载项加载到侧面板中时,它会使某些方法对您可用,您可以使用这些方法并在某种程度上创建一个伪身份(例如)-但是如果您想要真正的身份验证,您需要自己进行验证 据我所知,有三种方法可以做到这一点
- 当用户加载你的第一页时,确保像
这样的JS值对他们可用。这会派上用场的window.Unique\u ID
- 在用户界面中有一个按钮,上面写着“验证”
- 当用户单击此按钮时,您将它们弹出到一个url,该url将重定向到您的身份验证url。(差不多)。这将避免您在侧面板中被阻止的麻烦,因为您正在使用
窗口。请使用域中的url打开
。将唯一的_ID传递给重定向,然后重定向到OAuth登录URL。看起来应该是
https://login.microsoftonline.com/......&state=Unique_ID
- 在将用户弹出到