我正试图在我的ASP.NET Core 2. 0 Web API中集成Google身份验证,但我不知道如何让它工作。
我在Startup.cs ConfigureServices
中有以下代码:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddDefaultTokenProviders();
services.AddAuthentication()
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
字符串
在Configure(IApplicationBuilder app, IHostingEnvironment env)
中:
app.UseAuthentication();
型
当我导航到一个Authorized
端点时,结果是一个302 Found
,因为它可能重定向到某个登录端点(我从未创建过)。如何防止重定向,并让API只期望一个令牌,如果没有提供令牌,则返回一个401
?
4条答案
按热度按时间kpbpu0081#
经过两天的努力,以找到一个最好的答案,因为我想实现它作为一个后端API重定向前端到谷歌登录页面,它使用jwt身份验证作为默认的auth方法,并使用谷歌只为特定的方法,将工作在特定的方法,如果我想。
(Dot网7)
所以我这样配置我的program.cs:
字符串
然后像这样配置你的appsetting:
型
现在所有的api都需要jwt授权,你也可以像这样通过google授权:
型
Also this youtube video can help you
btxsgosb2#
为子孙后代展示我的终极方法。
正如Tratcher所指出的,
AddGoogle
中间件实际上并不是用于JWT身份验证流的。所以我接下来的问题是
1.我不能再依赖标准的dotnet核心JWT认证中间件了,因为我需要将Google令牌验证委托给Google库
1.没有C# google验证器被列为该页面上的外部客户端库之一。
经过进一步的挖掘,我发现JWT验证支持是使用这个类和方法添加到C#here的:
Google.Apis.Auth.Task<GoogleJsonWebSignature.Payload> ValidateAsync(string jwt, GoogleJsonWebSignature.ValidationSettings validationSettings)
接下来,我需要弄清楚如何替换内置的JWT验证。
下面是我的自定义GoogleTokenValidator:
字符串
在
Startup.cs
中,我还需要清除默认的JWT验证,并添加我的自定义验证:型
也许有一个更简单的方法,但这是我登陆的地方,它似乎工作正常!有额外的工作,我离开了这里简单,例如,检查是否已经有一个用户在我的用户的数据库中,匹配由谷歌提供的索赔,所以我道歉,如果上面的代码不100%的工作,因为我可能已经删除了一些不经意间。
nafvub8i3#
我刚刚发布了一个NuGet package来处理Google OpenID Connect令牌的验证。
该软件包依赖于来自Microsoft.AspNetCore.Authentication.JwtBearer的Microsoft JWT验证和身份验证处理程序,并在托管域周围添加了一些验证。
它在
JwtBearerOptions
上包含一个公共扩展方法UseGoogle
,允许您配置处理程序来验证Google OpenID Connect令牌,而无需其他依赖项:字符串
如果你想看看源代码,你可以找到它here。
zyfwsgd64#
Mikeyg36的回答很棒,最终帮助我解决了我的jwt token问题。然而,我添加了clientId,我觉得这很重要,因为你不想验证任何进来的id token。我还在AddIdentity中添加了“JwtBearer.AuthenticationScheme”。
字符串