Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何通过图传播Azure B2C广告声明更新?_Asp.net Core_Asp.net Core Webapi_Azure Ad B2c - Fatal编程技术网

Asp.net core 如何通过图传播Azure B2C广告声明更新?

Asp.net core 如何通过图传播Azure B2C广告声明更新?,asp.net-core,asp.net-core-webapi,azure-ad-b2c,Asp.net Core,Asp.net Core Webapi,Azure Ad B2c,我有一个网站使用Azure B2C广告进行身份验证,并使用Graph API更新用户声明。声明得到了正确的更新,但是,我遇到了一个传播/计时问题 简单地说:前端是.Net core 2 MVC,通过.Net core webapi后端调用,当用户正常登录时,该后端执行所有数据操作等操作?一切都很好。索赔通过Web API传递没有问题(通过承载令牌,通过中间件自动处理,完美) 当我们更新用户声明时,问题就来了——如果我们通过graph API更新声明,然后立即执行质询请求(例如,我们在站点内切换用

我有一个网站使用Azure B2C广告进行身份验证,并使用Graph API更新用户声明。声明得到了正确的更新,但是,我遇到了一个传播/计时问题

简单地说:前端是.Net core 2 MVC,通过.Net core webapi后端调用,当用户正常登录时,该后端执行所有数据操作等操作?一切都很好。索赔通过Web API传递没有问题(通过承载令牌,通过中间件自动处理,完美)

当我们更新用户声明时,问题就来了——如果我们通过graph API更新声明,然后立即执行质询请求(例如,我们在站点内切换用户配置文件),返回的声明仍然是旧的声明值,而不是更新的声明值。我尝试过的解决方案:

  • 当我通过graph API更新时,只是更新用户对象的 (显然这不起作用,它不会保存回cookie,所以 下一次对服务器的调用将通过cookie返回用户 使用旧的索赔价值)

  • 在通过图表更新索赔后输入硬编码延迟 API,但在调用质询之前。这是可行的,但显然是一个错误 糟糕的解决方案,因为我们必须将延迟硬编码为最坏情况 演员场景(但仍然不能保证我们已经等待了很长时间) (足够)

  • 缓存更新的索赔值,捕获已验证的
    OnTokenValidated
    事件,并仅更新用户对象 如果挑战返回的声明与 更新的索赔价值。这会保存到cookie中,因此所有 前端调用现在将看到新的索赔值,但实际上没有 更新承载令牌(其中包含加密的所有声明) 因此web API看不到更新的声明值

  • 缓存更新的声明值,并将重定向URI传递给 到达特定页面的质询调用,该页面只检查 现在查看用户的声明是否都与更新的声明值匹配。 这是可行的,给了我们最少的时间,让我们看到 在B2C中完全更新后,立即更新索赔。但是,它 仍然可能需要几秒钟,而且在等待看到所有 更新的声明,它只是坐在那里回收到B2C 然后一次又一次地回到登录页面,在屏幕上闪烁 标题栏,正在等待

  • 我的理想解决方案是,如果我可以使用上面的#3,同时更新承载令牌,以便web API也能看到它。但我认为这是不可能的。我希望有人会告诉我这是真的。下一个最好的方法是,如果有一种方法可以只刷新用户对象,而不反复执行同步质询-我试图找出ChallengeAsync,即使用更新的用户对象和更新的声明值进行注销/登录调用的各种组合,但这些组合都不起作用


    希望我错过了一些真正愚蠢的事情,有人能指出我在哪里真正愚蠢。那会让我省去很多头痛。

    你看过这篇文章吗?它讨论了更新索赔问题的多种解决方案。你看过这篇文章了吗?它讨论了更新索赔问题的多种解决方案。