在我的ASP。NET核心3应用程序,我想实现与谷歌登录,只允许特定用户的身份验证。
到目前为止,我所做的是遵循以下教程:
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/social-without-identity?view=aspnetcore-3.0 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-3.0
下一步是什么让用户只为特定的谷歌账户授权?即使用户成功通过谷歌认证,我只希望特定的谷歌帐户(电子邮件地址)有权访问我的ASP。NET Core应用程序。
我试图为“OnCreatingEvent”事件设置一个委托,但我不知道如何拒绝授权。
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options =>
{
options.ClientId = Configuration["google-credentials:ClientId"];
options.ClientSecret = Configuration["google-credentials:ClientSecret"];
options.Events = new OAuthEvents()
{
OnCreatingTicket = HandleOnCreatingTicket
};
});
private async Task HandleOnCreatingTicket(OAuthCreatingTicketContext context)
{
var user = context.Identity;
if (user.Claims.FirstOrDefault(m => m.Type == ClaimTypes.Email).Value != "MY ACCOUNT")
{
// How to reject authorization?
}
await Task.CompletedTask;
}
您可以创建一个策略来检查用户名声明是否在允许的用户名列表中,并根据验证结果返回true/false:
services.AddAuthorization(options =>
{
options.AddPolicy("AllowedUsersOnly", policy =>
{
policy.RequireAssertion(context =>
{
//Here you can get many resouces from context, i get a claim here for example
var name = context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;
//write your logic to check user name .
return false;
});
});
});
然后,您可以在控制器/操作上应用策略或注册全局过滤器。
目前,Google Assitant包括一种简单的方法来请求有关用户的不可识别信息,以及通过OAuth2在第三方服务上对用户进行身份验证的详细流程。如果我只需要让用户在 Google 上进行身份验证,该怎么办?我尝试使用Google OAuth2信息填写帐户链接流程,但这似乎不起作用。如果最后一件事应该流利地工作,那么这将是一个足够的答案。 上下文:用户已经只在相关网页上使用谷歌进行身份验证。我所
我正在遵循官方的Google身份验证流程。我的应用程序已经使用了最新版本的Google地图。 项目 应用程序 地图下方有一条红线,弹出窗口显示找到了11.8.0和11.4.2。构建错误消息如下:, 错误:任务“:应用程序:进程”的执行失败。 请通过更新谷歌服务插件的版本来修复版本冲突(有关最新版本的信息,请访问https://bintray.com/android/android-tools/co
这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?
我有一个带有AzureSQL后端的MS Access前端应用程序(accdb)。我目前正在使用SQL服务器身份验证,但我想使用某种活动目录。我没有本地广告,所以我最初考虑设置Azure广告。然而,我们的小团队已经在使用Office 365,据我所知,O365由Azure AD提供支持。 所以我的问题是,是否可以使用O365帐户(微软通常称之为“工作帐户”)来针对Azure SQL后端进行身份验证?
我正在尝试访问谷歌联系人API,但我的尝试已经失败了。从其他(网络)语言,我习惯于API控制台和公共API密钥(授权)。 这样,我就不能刷新令牌,也不能确定是否将公钥用作accesstoken...相反,我尝试了一个服务帐户: 这里我的例外: 谢谢提示!