.net-core - MSAL TokenAcquisition GetAccessTokenOnBehalfOfUser 始终失败,因为 getaccounts 始终为空
问题描述
我一直在尝试使用 AzureAD MSAL 和 ADAL,但从未能够检索到令牌。我已经尝试了所有示例并继续遇到相同的问题,创建了令牌,将其添加到 EF Cahce DB,但是当 tokenAquisition 对象尝试检索它时,找不到帐户并且无法获取令牌。
我已经阅读了 GitHub 和 SO 上的大部分(如果不是全部)问题。这似乎对其他人有用,但看起来很多人都有同样的问题,除了将我指向我尝试过的样本之外,我还没有看到答案。
目前的简单问题 - 我如何从IConfidentialClientApplication
?
我从来没有得到一个帐户或帐户列表。
创建应用对象:
var app = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(_applicationOptions)
.WithRedirectUri(currentUri)
.WithAuthority(authority)
.Build();
在GetAccessTokenOnBehalfOfUser
:
--> IAccount account = await application.GetAccountAsync(accountIdentifier);
返回 NULL
和
--> var accounts = await application.GetAccountsAsync();
返回一个空列表/ienumarables
我希望从中检索一个帐户application.GetAccountAsync(accountIdentifier)
和一个列表await application.GetAccountsAsync();
解决方案
好的,终于找到我的问题了。
问题在于使用 ASPNet 身份登录到 AzureAD 作为外部授权,但使用身份登录和创建声明原则。
我正在从我的声明中删除 AzureAD ObjectIdentifier。所以解决方案似乎是将 ObjectIdentifier 添加到身份中。我通过使用 ClaimsTransofrmation 并查找身份验证类型来做到这一点。如果它不是 Identity.Application 它来自 AzureAD 并检查用户是否有 UserClaim,如果没有则添加它。然后提取该索赔并将其放入本金的索赔中并隐藏起来,现在该帐户已找到....
if (principal.HasClaim(c => c.Type == SecurityConstants.ClaimTypes.ObjectId))
{
string oId = principal.FindFirstValue(SecurityConstants.ScpcClaimTypes.ObjectId);
var user = _usrMgr.FindByNameAsync(usrNm).Result;
List<Claim> claims = new List<Claim>(_usrMgr.GetClaimsAsync(user).Result);
if (!claims.Exists(c => c.Type == SecurityConstants.ScpcClaimTypes.ObjectId))
{
_usrMgr.AddClaimAsync(user, new Claim(SecurityConstants.ScpcClaimTypes.ObjectId, oId));
}
推荐阅读
- javascript - 如何在js文件中使用backgroundFilter而不是css而不出错
- c# - DataTemplate 中的绑定在第一次加载视图时不起作用
- mapbox - 如何在 MapBox iOS 中放大缩小时保持地图始终以当前位置为中心
- ios - 尝试在登机时运行时应用程序委托出错
- python-3.x - 图像、pdf 附件到 couchbase 并读取 blob 文件类型并从 couchbase 重新生成文件
- spring-boot - Spring Boot 2 测试:我怎样才能只有一个 EntityManager?
- javascript - 在反应中将数组数据转换为表格
- arrays - LinkedLists 数组总是给出 NullPointerException
- three.js - BBoxes 不是最佳的 - 在 Autodesk Forge Viewer 中重新计算边界框
- google-data-studio - 如何从嵌入 URL 获取用户令牌?