无法在 ASP.NET MVC 上使用 ADAL for Office 365 REST API 静默验证用户

Cant authenticate user silently with ADAL for Office 365 REST API on ASP.NET MVC

所以我正在尝试为我们的办公室身份验证实施持久性令牌,这样用户就不必在每次进入新会话时都登录办公室。我目前必须验证用户的代码如下。

string authority = "https://login.microsoftonline.com/common";
var tokenCache = new ADALTokenCache(User.Identity.GetUserId());
AuthenticationContext authContext = new AuthenticationContext(authority, tokenCache );
var token = authContext.AcquireTokenSilentAsync(scopes, clientId, new UserIdentifier(userId, UserIdentifierType.RequiredDisplayableId));

但是我到目前为止所做的一切都给我以下错误

例外情况是:"Failed to acquire token silently. Call method AcquireToken"

我最初获取token的方法如下

string authority = "https://login.microsoftonline.com/common";
var fileCache = new ADALTokenCache(User.Identity.GetUserId());
AuthenticationContext authContext = new AuthenticationContext(authority, fileCache);
var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
                authCode, redirectUri, credential, scopes);

我使用的令牌缓存是我根据教程制作的数据库实现,我再也找不到了,如果我看数据库,我可以看到 AcquireTokenByAuthorizationCodeAsync 时新令牌被插入到数据库中叫做。

更新:
这是我在调用 AcquireTokenByAuthorizationCodeAsync 时从 authResult 得到的结果

我已将 Virbonet 的答案标记为解决方案,但我没有修复它,但他确实向我解释了我哪里出错了

这是您需要使用的函数调用:AcquireTokenByAuthorizationCode() 但不是 AcquireTokenSilent().

希望对您有所帮助。

如果您在权限中传递 /common,

AcquireTokenSilent 将无法工作。使用 "common" 等同于声明您不知道用户来自哪个租户,因此 ADAL 无法 return 缓存令牌形成特定租户 - 需要用户交互来确定应使用哪个租户。 如果你想调用 AcquireTokenSilent,你需要用传入用户的确切租户初始化权限,如 "https://login.microsoftonline.com/"+tenantID 这里 tenantID 是当前 ClaimsPrincipal 的租户 ID。