У меня есть приложение Identity server 4. Это позволяет нашим клиентам входить в систему с нашим логином и с сторонними логинами Google и Facebook (facebook и google). У нас также есть возможность входа в систему 2fa (два фактора).
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
}).AddGoogle("Google", options =>
{
options.AccessType = "offline";
options.SignInScheme = IdentityConstants.ExternalScheme;
options.ClientId = Configuration.GetSection("Settings:GoogleClientId").Value;
options.ClientSecret = Configuration.GetSection("Settings:GoogleClientSecret").Value;
})
.AddFacebook("Facebook", facebookOptions =>
{
facebookOptions.SignInScheme = IdentityConstants.ExternalScheme;
facebookOptions.AppId = Configuration.GetSection("Settings:FacebookAppId").Value;
facebookOptions.AppSecret = Configuration.GetSection("Settings:FacebookAppSecret").Value;
});
Все это работает. Однако у меня есть требование от высшего руководства.
У пользователей, которые являются сторонниками (для этого есть флаг в системе), должно быть включено два фактора. Это было довольно просто, я просто сделал это требованием, чтобы они не могли отключить двухфакторную систему в нашей системе.
Однако вскоре мы обнаружили проблему с этим. Если у пользователя включено два фактора в его учетной записи Google. Затем они входят в систему с помощью Google, должны предоставить двухфакторный код, а затем они возвращаются в нашу систему, где им снова нужно предоставить двухфакторный код для нашей системы.
Есть ли способ определить, что пользователь включил два фактора в своей учетной записи Google? Как только я узнаю, что это было включено, я могу перестать спрашивать у них двухфакторный код в нашей системе. Я посмотрел везде, и эта информация, похоже, не возвращается ко мне. Не похоже, чтобы какой-либо API Google давал мне знать, включен ли он в их учетной записи.