我在Azure中创建了一个Web API。 此Web API在SharePoint Online中进行一些调用。一些api调用是代表的。
此Web API在01.05.2018之前正常工作 - 它可以在2014年5月1日之前创建的旧应用服务中正常工作。
一位微软员工说:作为我们安全加固工作的一部分,我们不允许使用id_token 兑换2018-05-01 00:00:00之后创建的任何申请。
在adal的登录过程中,我得到了id_token。 id_token具有与access_token相同的值:
当我调用web api时,我会将此令牌作为持票令牌发送。 Web API获取此标记(字符串accessToken)并启动方法'AcquireTokenAsync':
var clientID = ConfigurationManager.AppSettings["ClientID"];
var clientSecret = ConfigurationManager.AppSettings["ClientSecret"];
var tenant = ConfigurationManager.AppSettings["Tenant"];
var appCred = new ClientCredential(clientID, clientSecret);
var authContext = new AuthenticationContext(
"https://login.microsoftonline.com/" + tenant);
var resource = new Uri(sharePointUrl).GetLeftPart(UriPartial.Authority);
var authResult = await authContext.AcquireTokenAsync(resource, appCred,
new UserAssertion(accessToken));
return authResult.AccessToken;
但是在调用'AcquireTokenAsync'的行中我收到了错误消息:
AADSTS240002: Input id_token cannot be used as 'urn:ietf:params:oauth:grant-type:jwt-bearer' grant
但问题出在哪里?
答案 0 :(得分:1)
问题是您在前端和后端使用相同的应用程序标识,并且MS不允许您使用Id令牌(由于前者而在此处用作访问令牌)另一个访问令牌。
可能的解决方案:
如果这是一个多租户应用,迁移可能并不容易。 如果是单租户,那么一切都应该是可能的。 您的前端应用程序当然应该需要在Azure AD中调用您的后端API的权限,并且应该授予该权限。
另一个解决方案是使用ADAL.JS获取前端中的其他访问令牌,而不是在后端使用on-represent-in并将其附加到除Id令牌之外的所有API请求。 / p>