首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Microsoft.Identity.Web使用AzureAdB2C时访问用户令牌

通过Microsoft.Identity.Web使用AzureAdB2C时访问用户令牌
EN

Stack Overflow用户
提问于 2020-08-10 19:48:14
回答 1查看 201关注 0票数 0

我有一个简单的Blazor服务器端应用程序,它使用microsoft-identity-web 0.2.1-预览包登录用户。

其目的是使用AzureAdB2C登录提供身份验证,该登录允许用户使用他们的微软个人帐户登录,并使用委托访问来调用Microsoft Graph函数。(在未来,我想扩展到包括其他云提供商,因此使用B2C)。

在我的Startup.cs中,我添加了MicrosoftWebAppAuth和服务,如下所示:

代码语言:javascript
复制
            services.AddMicrosoftWebAppAuthentication(Configuration, "AzureAdB2C")
               .AddMicrosoftWebAppCallsWebApi(Configuration, new string[] { "User.Read", Constants.ScopeSpecialFolder})
               .AddInMemoryTokenCaches();

            services.AddTransient<MyService>();

使用初始化的ITokenAcquisition正确调用了我的服务

代码语言:javascript
复制
        public MyService(ITokenAcquisition tokenAcquisition,
                              IOptions<WebOptions> webOptionValue, AuthenticationStateProvider AuthenticationStateProvider)
        {

如果我调用await tokenAcquisition.GetAccessTokenForAppAsync(scopes);,就会抛出一个带有以下堆栈跟踪的NullReferenceException:

代码语言:javascript
复制
   at Microsoft.Identity.Web.TokenAcquisition.<BuildConfidentialClientApplicationAsync>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Identity.Web.TokenAcquisition.<GetOrBuildConfidentialClientApplicationAsync>d__17.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Identity.Web.TokenAcquisition.<GetAccessTokenForAppAsync>d__15.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

精确的代码可以很好地用于AzureAd身份验证。我假设这不是使用B2C身份验证时访问用户令牌的正确方式?我应该调用什么来进行委托的Microsoft API调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-15 03:09:07

您正在使用GetAccessTokenForAppAsync,这是一种使用客户端凭据获取应用程序访问令牌的方法(此处不涉及用户)。

您应该使用的是GetAccessTokenForUserAsync()

代码语言:javascript
复制
await tokenAcquisition.GetAccessTokenForUserAsync(scopes);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63339576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档