Single sign on 将SSO与Office.js Excel加载项一起使用-如何设置令牌的访问群体?

Single sign on 将SSO与Office.js Excel加载项一起使用-如何设置令牌的访问群体?,single-sign-on,office-js,Single Sign On,Office Js,TL;DR-有没有一种方法可以从Office.js中获得具有自定义受众(可能还有权限)的持票人代币 细节- 我们正在尝试将新的SSO内容用于Office.js加载项,但遇到了一个问题,即来自OfficeRuntime.auth的承载令牌将访问群体设置为我们加载项的GUID;我们希望像MSAL一样设置不同的受众(我们的API应用程序),但似乎没有任何选择。我们正在使用fromOfficeRuntime.auth: const token = await OfficeRuntime.auth.get

TL;DR-有没有一种方法可以从Office.js中获得具有自定义受众(可能还有权限)的持票人代币

细节-

我们正在尝试将新的SSO内容用于Office.js加载项,但遇到了一个问题,即来自
OfficeRuntime.auth
的承载令牌将访问群体设置为我们加载项的GUID;我们希望像MSAL一样设置不同的受众(我们的API应用程序),但似乎没有任何选择。我们正在使用from
OfficeRuntime.auth

const token = await OfficeRuntime.auth.getAccessToken({
    allowSignInPrompt: withUI,
    allowConsentPrompt: withUI
});
withUI
只是一个
true
/
false
标志,我们根据显示的UI是否正常来发送函数。)

没有显示我们可以看到的“范围”或“受众”(或“权限”)选项。当然,这些东西都是预览版,所以可能是“它还没有在那里”

我们的设置是:

+−−−−−−−−−−−−−−−−−+ | Browser / Excel | +−−−−−−−−−−−−−−−−−+ | | | +−−−−−−−−−−−−−+ +−−−−−−−−−−−−−−−−−−−+ +−−−−−−−−−−−−−−−−−+ | | Our add−in |<−−−−−>| Server w/ our API |<−−−−−>| Microsoft Graph | | +−−−−−−−−−−−−−+ +−−−−−−−−−−−−−−−−−−−+ +−−−−−−−−−−−−−−−−−+ | | ^ +−−−−−−−−−−−−−−−−−+ | v +−−−−−−−−−−−−−−−−−+ | Azure DB | +−−−−−−−−−−−−−−−−−+ 但这感觉像是一个解决办法,而不是一个解决方案;我们的Azure配置并不代表正在发生的事情,而是硬编码身份验证


如果我的一些术语不正确,我道歉。Azure对我来说是新的(但对团队中的其他成员来说不是)。

这种行为是设计出来的。对于Office SSO,web API必须与外接程序具有相同的域和AAD GUID

如果你想把它们分开,那么你找到的解决办法似乎很好。(我很惊讶你找到了一条路。)

您可能还希望尝试将外接程序的GUID放入API的AAD注册的授权客户端应用程序部分。

这种行为是设计的。对于Office SSO,web API必须与外接程序具有相同的域和AAD GUID

如果你想把它们分开,那么你找到的解决办法似乎很好。(我很惊讶你找到了一条路。)

您可能还希望尝试将外接程序的GUID放入API的AAD注册的授权客户端应用程序部分。

事实证明这是一个非常愚蠢的错误:我们为必须在API项目中指定受众和权限而烦恼(在问题代码中),但事实证明我们已经在API项目中指定了受众和权限-它们是在
appsettings.json
中定义的(使用不同的值)。所以我们添加的代码只是用正确的值重写了它们


更改
appsettings.json
受众
权限
设置,并删除覆盖它们的代码,效果很好。因此,它已经有点硬编码(或者至少没有通过AD控制),只是在一个配置文件中,而不是在代码中。

结果证明这是一个非常愚蠢的错误:我们为必须在API项目(在问题代码中)中指定受众和权限而烦恼,但事实证明我们已经在API项目中指定了它们,它们是在appsettings.json中定义的(使用不同的值)。所以我们添加的代码只是用正确的值重写了它们


更改
appsettings.json
受众
权限
设置,并删除覆盖它们的代码,效果很好。所以它已经有点硬编码(或者至少没有通过AD控制),只是在配置文件中,而不是在代码中。

谢谢你的回答!因此,我们不能按照我们想要的方式对其进行建模,因为从AAD的角度来看,外接程序和API是独立的应用程序?(有趣的是,我们认为解决这个问题的另一种方法实际上是将外接程序和API作为单个应用程序,从而成为单个GUID…)实际上,我想知道我是否正确地描述了这个问题,因为这是一个非常愚蠢的错误;我已经发布了一个答案,告诉你错误是什么。谢谢你的回答!因此,我们不能按照我们想要的方式对其进行建模,因为从AAD的角度来看,外接程序和API是独立的应用程序?(有趣的是,我们认为解决这个问题的另一种方法实际上是将外接程序和API作为单个应用程序,从而成为单个GUID…)实际上,我想知道我是否正确地描述了这个问题,因为这是一个非常愚蠢的错误;我已经发布了一个回复,说明错误是什么。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        Configuration.Bind("AzureJwt", options);
        // These next two are the ones we had to add to make it work
        // when we realized there was an audience problem
        options.Audience = "guid-for-the-add-in";
        options.Authority = "https://login.microsoftonline.com/relevant-guid-here/v2.0";
    });