Azure active directory office插件office.context.auth.getAccessTokenAsync错误13004
我正在构建office.js excel插件 我有代码尝试获取身份验证信息:Azure active directory office插件office.context.auth.getAccessTokenAsync错误13004,azure-active-directory,office-js,Azure Active Directory,Office Js,我正在构建office.js excel插件 我有代码尝试获取身份验证信息: Office.context.auth.getAccessTokenAsync(function(result) { if (result.status === "succeeded") { // Use this token to call Web API var ssoToken = result.value; } else { if (result.error.code === 1
Office.context.auth.getAccessTokenAsync(function(result) {
if (result.status === "succeeded") {
// Use this token to call Web API
var ssoToken = result.value;
} else {
if (result.error.code === 13003) {
// SSO is not supported for domain user accounts, only
// work or school (Office 365) or Microsoft Account IDs.
} else {
// Handle error
}
}
执行此操作时,返回错误13004,并显示消息“name=”提供的应用程序资源Url无效。“”
我的舱单包含:
<WebApplicationInfo>
<Id>a02210cd-88ac-4af6-b6cf-ee79006731c1</Id>
<Resource>api://localhost:8001/a02210cd-88ac-4af6-b6cf-ee79006731c1</Resource>
</WebApplicationInfo>
</VersionOverrides>
a02210cd-88ac-4af6-b6cf-ee79006731c1
api://localhost:8001/a02210cd-88ac-4af6-b6cf-ee79006731c1
我已在以下位置创建加载项应用程序注册:
具有该应用程序id的(我尝试了“本机”类型和“web”类型,但不确定哪个应用于office插件).错误代码13004和提供的消息
无效应用程序资源Url
指出,用于标识Azure AD v/s中资源的值与外接程序清单中指定的值不匹配
外接程序清单中
标记的值应与Azure AD中注册的应用程序ID URI
中的值完全匹配。唯一的区别是清单中资源值的协议部分将是api
而不是https
万一
- Azure AD应用程序注册中的应用程序ID URI为
https://yourdomain.onmicrosoft.com/GUID1
- 资源值将为
api://yourdomain.onmicrosoft.com/GUID1
一些人正确地指出WebApplicationInfo.Resource必须与在AD服务器中注册的appId匹配 但基本上我所有的问题都是要登录哪个广告帐户(我有一个个人帐户和一个公司帐户,您使用不同的门户访问每个帐户),以及如何在该广告帐户/应用程序注册上设置清单 有数百个旋钮/变量需要调整,几乎没有关于它们的含义或如何调整的反馈。因此,我将简单地介绍一个其他人可以用来实现此功能的工作示例。我不确定哪些旋钮/权限很重要 以下是一个工作(我的应用程序的子集)清单:
...
<WebApplicationInfo>
<Id>fc63fe86-d03c-4ae9-b520-373fcb386d40</Id>
<Resource>api://localhost:8001/09c94a00-cad9-4af6-ac2c-cdb81a724f16</Resource>
<Scopes>
<Scope>Files.Read.All</Scope>
<Scope>offline_access</Scope>
<Scope>openid</Scope>
<Scope>profile</Scope>
</Scopes>
</WebApplicationInfo>
}
注意-您不能只复制关键的requiredResourceAccess和preAuthorizedApplications部分。相反,使用Ad应用程序注册页面中的GUI,并转到“公开API”部分。首先添加一个作用域名为“user_impersonation”的作用域;然后添加3个授权客户端应用程序(假设您希望支持excel桌面和office online)—57fb890c-0dab-4253-a5e0-7188c88b2bb4、d3590ed6-52b3-4102-aeff-aad2292ab01c、bc59ab01-8403-45c6-8796-ac3ef710b3e3
这将在您的清单中生成与我的预授权应用程序非常接近的部分
我要感谢帮助我解决这一切的人——吉姆·巴雷特()
祝你好运 您的问题源于您试图在portal.azure.com上注册外接程序不支持此操作。若要对Office加载项使用单点登录系统,必须在AAD V 2.0端点处注册:。这在文档中有说明,例如,@Rohistaigal在几个地方链接到的概述文章中。他还链接了如何在网站上进行此操作的说明 您对自己的问题给出的答案不是受支持的配置
我认为你应该考虑给Rohit赏金。 确保Azure AD App Registration中的
应用ID URI
值与您为资源提供的值完全匹配。要检查应用程序ID URI。。转到Azure门户>Azure AD>应用程序注册>获取外接程序的应用程序注册>设置>属性在Azure ID应用程序注册中,我找不到您所说的“应用程序ID URI”字段。我确实找到了一个名为“应用程序ID”的字段,上面的ID(在WebApplicationInfo中)与之完全匹配。@Rohisaigal您应该在properties blade中看到它。。这是一张截图。。确保App ID URI
中的值与
中的值完全匹配,谢谢@rohisaigal。现在我明白了为什么你有那个应用程序ID URI(它可能与我的问题有关)。您将应用程序类型标记为“Web appAPI”,而我选择了“本机应用程序”。您引用的字段仅在您选择“Web app/API”时出现。现在-我不确定office js插件是什么。我不知道MSFT是调用该Web应用程序还是本机应用程序?实际上两者都不是(或者两者兼而有之)。这是一个javascript应用程序,运行在本机Excel代码中。我不知道本机可能意味着什么?office加载项最接近VSTO加载项,但它们不支持VSTO与ADAL,因此不能这样。无论如何,即使尝试将其称为web app/API,它仍然不起作用。该字段的格式是,但WebApplicationInfo的文档说资源的形式必须是api://myDomain.com/12345678-abcd-1234-efab-123456789abc,因此您的提示似乎不合适。感谢您的回复,但这并没有解决我的特定问题(这是与广告配置有关)。我有一个非常具体的问题:外接程序的web内容是否需要特别托管在Azure上,或者可以托管在任何其他托管提供商上?不支持在portal.Azure.com上注册应用程序。你应该使用AAD V2.0端点。请看。自己试试。我希望我可以包括一个屏幕截图。我尝试了你的建议。我在文档推荐的网站上创建了应用程序。然后(在该网站上)弹出一个对话框,说“我们在Azure Portal中有了新的体验,我们推荐managi
{
"id": "1a225d9a-13f5-4ff6-a62d-bdbd819ef5e5",
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": 2,
"allowPublicClient": null,
"appId": "09c94a00-cad9-4af6-ac2c-cdb81a724f16",
"appRoles": [],
"oauth2AllowUrlPathMatching": false,
"createdDateTime": "2019-03-11T15:45:24Z",
"groupMembershipClaims": null,
"identifierUris": [
"api://localhost:8001/09c94a00-cad9-4af6-ac2c-cdb81a724f16"
],
"informationalUrls": {
"termsOfService": null,
"support": null,
"privacy": null,
"marketing": null
},
"keyCredentials": [],
"knownClientApplications": [],
"logoUrl": null,
"logoutUrl": null,
"name": "StackOverflowTest",
"oauth2AllowIdTokenImplicitFlow": true,
"oauth2AllowImplicitFlow": true,
"oauth2Permissions": [
{
"adminConsentDescription": "consent to use plugin",
"adminConsentDisplayName": "consent to use plugin",
"id": "56b9c899-4e7f-47d3-a584-50ab695b164e",
"isEnabled": true,
"lang": null,
"origin": "Application",
"type": "User",
"userConsentDescription": "consent to use plugin",
"userConsentDisplayName": null,
"value": "user_impersonation"
}
],
"oauth2RequirePostResponse": false,
"optionalClaims": null,
"orgRestrictions": [],
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [],
"preAuthorizedApplications": [
{
"appId": "57fb890c-0dab-4253-a5e0-7188c88b2bb4",
"permissionIds": [
"56b9c899-4e7f-47d3-a584-50ab695b164e"
]
},
{
"appId": "d3590ed6-52b3-4102-aeff-aad2292ab01c",
"permissionIds": [
"56b9c899-4e7f-47d3-a584-50ab695b164e"
]
},
{
"appId": "bc59ab01-8403-45c6-8796-ac3ef710b3e3",
"permissionIds": [
"56b9c899-4e7f-47d3-a584-50ab695b164e"
]
}
],
"publisherDomain": "USENAMEFROMYOURDEFAULTGENERATEDAPPREGISRATION.onmicrosoft.com",
"replyUrlsWithType": [
{
"url": "https://localhost:8001",
"type": "Web"
}
],
"requiredResourceAccess": [
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
"type": "Scope"
}
]
}
],
"samlMetadataUrl": null,
"signInUrl": null,
"signInAudience": "AzureADMultipleOrgs",
"tags": [],
"tokenEncryptionKeyId": null