首页 > 解决方案 > 如何在 C# 中使用 ASP.NET Core 连接外部身份验证服务器

问题描述

我正在尝试使用 Google API 对 ASP.NET Core 进行身份验证,以便能够访问人员 api。

我有以下代码:

 services.AddAuthentication()
           .AddOpenIdConnect(GoogleDefaults.AuthenticationScheme,
               GoogleDefaults.DisplayName,
               options =>
               {
                   options.Authority = "https://accounts.google.com/o/oauth2/v2/auth";
                   options.ClientId = Configuration["Authentication:Google:ClientId"];
                   options.ClientSecret = Configuration["Authentication: Google:ClientSecret"];
                   options.ResponseType = OpenIdConnectResponseType.Code;
                   options.Scope.Add("openid");
                   options.Scope.Add("email");
                   options.CallbackPath = "/signin-google";
               });

问题是我得到以下异常

处理请求时发生未处理的异常。
IOException:IDX20807:无法从以下位置检索文档:'[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]'。HttpResponseMessage: '[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]', HttpResponseMessage.Content: '[PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'

我该如何解决这个问题?

第二个问题:如何从控制器访问访问令牌以便能够向 People API 发送请求?

最好的问候,迈克

标签: c#asp.net-coreauthentication

解决方案


【关于如何在控制器中访问用户】

你使用 JWT 令牌吗?如果是这样,我访问它:

this.HttpContext.User;

然后,如果您还没有修改它,jwt 有效负载将分为几个声明。就我而言,默认情况下,令牌是有状态的(意味着其中包含用户信息),并且用户 ID 存储在第五个声明中

.Claims.ToList()[5].Value;

推荐阅读