Azure IConfidentialClientApplication GetAccountsAsync不返回任何内容
我正在尝试让Azure广告B2C演示与我的Azure广告一起工作。这有两个项目-TaskService和TaskWebApp。我让Web应用程序部分开始工作。它指引我进入正确的登录页面。我使用的是b2clogin.com而不是login.microsoftonline.com。如果我进入web应用程序中的索赔页面,一切都会正常。但是,当我尝试使用TaskService(待办事项列表)时,它在TaskController中失败 首先,它进入OnAuthorizationCodeReceived,令牌和声明看起来是正确的。AcquireTokenByAuthorizationCode返回一个令牌,注释表示应该缓存该令牌。然后它进入TaskController函数(索引),并创建另一个机密ClientApplication。然后调用GetAccountsAsync,返回一个空列表。没有错误,我也不知道为什么。这会导致下一行失败,并出现合理的错误消息: “未向AcquireTokenSilent调用传递任何帐户或登录提示。” 因为它正在传递一个空列表作为第二个参数 这导致浏览器在登录页面和web应用程序之间循环多次,直到它决定停止Azure IConfidentialClientApplication GetAccountsAsync不返回任何内容,azure,azure-ad-b2c,Azure,Azure Ad B2c,我正在尝试让Azure广告B2C演示与我的Azure广告一起工作。这有两个项目-TaskService和TaskWebApp。我让Web应用程序部分开始工作。它指引我进入正确的登录页面。我使用的是b2clogin.com而不是login.microsoftonline.com。如果我进入web应用程序中的索赔页面,一切都会正常。但是,当我尝试使用TaskService(待办事项列表)时,它在TaskController中失败 首先,它进入OnAuthorizationCodeReceived,令
// Retrieve the token with the specified scopes
var scope = new string[] { Globals.ReadTasksScope };
IConfidentialClientApplication cca = MsalAppBuilder.BuildConfidentialClientApplication();
var accounts = await cca.GetAccountsAsync(); //this returns empty
AuthenticationResult result = await cca.AcquireTokenSilent(scope, accounts.FirstOrDefault()).ExecuteAsync(); //this throws exception
我不确定当我有当前的ClaimsPrincipal时,什么会导致我没有帐户。编辑:我注意到在OnAuthorizationCodeReceived中,我的AuthenticationResult几乎填写了所有内容,但Account.Username没有填写。那有关系吗?如果是这样,为什么不填写呢?假设您正在参考以下教程: 和相关的(主分支,提交bf3bcce) 我也有同样的问题。TaskWebApp工作正常,但访问依赖TaskWebApi的Tasks视图会导致auth循环。以下是我的发现,以及如何让它发挥作用
TL;DR 在TaskWebApp项目的Web.config中,在configuration/appSettings中添加以下行:
<add key="ida:TenantId" value="[your AAD B2C Tenant GUID here]" />
无论何时导航到/Tasks,我都可以验证是否命中此LOC。随后,我进入调用的每个LOC,查看调用堆栈的每个部分,以查看返回null的位置
- GetAccountsAsync()
- {外部代码}
- TaskWebApp.Utils.MSALPerUserMemoryTokenCache.UserTokenCacheBeforeAccessNotification(TokenClassNotification)不为NULL
- .LoadUserTokenCacheFromMemory()不为NULL
- .GetMsalAccountID()不为空
- TaskWebApp.Utils.claimpincipalextension.GetB2CMsalAccountId(System.Security.Claims.ClaimsPrincipal)NULL强>
string tenantId = Globals.TenantId;
它正在从TaskWebApp Web.config中定义的Globals类中分配租户ID,但它使用的是键“ida:TenantId”中的值,该值在任何地方都没有提供。您尝试使用哪个b2c演示来处理Azure广告?AAD B2C和AAD非常不同,这不仅仅是简单地更改租户ID和客户端ID。@FrankHuMSFT即使我们正在更改web配置文件中的所有应用程序设置,我们也会从令牌响应错误中获得用户名:Missing
string tenantId = Globals.TenantId;