无法在 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。
所以我正在尝试为我们的办公室身份验证实施持久性令牌,这样用户就不必在每次进入新会话时都登录办公室。我目前必须验证用户的代码如下。
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().
希望对您有所帮助。
AcquireTokenSilent
将无法工作。使用 "common" 等同于声明您不知道用户来自哪个租户,因此 ADAL 无法 return 缓存令牌形成特定租户 - 需要用户交互来确定应使用哪个租户。
如果你想调用 AcquireTokenSilent
,你需要用传入用户的确切租户初始化权限,如 "https://login.microsoftonline.com/"+tenantID
这里 tenantID
是当前 ClaimsPrincipal
的租户 ID。