首页 > 解决方案 > 在 Asp.Net Core API 2.1 中使用 Google AccessToken 获取外部声明

问题描述

我使用 JSON Web Token (Bearer) 作为我的默认身份验证。然后,我使用 (Cookies) 作为我的 Google 身份验证。

我在 Asp.Net Core API 中使用默认的 Google 身份验证来获取 AccessToken。然后,我使用重定向将该 AccessToken 传递给 Url 中的 Angular 应用程序。这类似于 ASP.Net MVC 5 Web API 的工作方式。从那里,我正在调用我的 Asp.Net Core API 以尝试获取剩余的声明。我正在使用 AccessToken 拨打电话。

有谁知道如何使用 Google AccessToken 访问外部声明?我知道如何在 Asp.Net MVC 5 Web API 中做到这一点,但 Asp.Net Core 有很大不同。

我可以在这里看到外部声明。这发生在用户通过 Google 进行身份验证后的 OAuth 过程中。这是在我的 ExternalLoginCallback 方法中。

var result = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);

以下是一些似乎有用的信息,但并未专门针对第三方 Auth。

https://docs.microsoft.com/en-us/aspnet/core/migration/claimsprincipal-current?view=aspnetcore-2.2

如果我在标头中使用 AccecssToken 调用 API,并像这样使用 HttpContext.AuthenticateAsync ......

var result = await HttpContext.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);

我明白了。

{System.Exception:没有可用于令牌的 SecurityTokenValidator:ya29.Glt5B_thgPhe8-FcR

提前致谢!任何帮助深表感谢。

标签: asp.net-coreasp.net-core-webapi

解决方案


这就是我最终要做的。由于我能够在 ExternalLoginCallback 方法中从 Cookie 中获取声明,因此我继续创建了一个新的 JSON Web 令牌 (JWT),将提取的声明添加到其中,然后将其传递给我的 Angular 应用程序。现在,当我调用回我的 API 时,我能够读取该令牌并在我的 GetUserInfo 方法中使用这行代码提取声明。

HttpContext.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);

底线,因为我无法像在我的 ASP.Net MVC 5 Web API 中那样读取 Google AccessToken,所以我继续创建了一个新的 JWT 令牌,添加到声明中并使用它。

顺便说一句,我必须做所有这些,因为由于已知的 Cors 政策问题,我无法直接从 Angular 调用我的 ExternalLogin 方法。


推荐阅读