Я работаю над веб-приложением и хочу, чтобы пользователи входили в систему, используя свои учетные записи Google. После урока здесь я смог добавить кнопку входа. Затем, следуя этому методу, я смог отправить запрос HTTP-Post в мое веб-приложение с токеном авторизации. В приложении у меня есть этот код, чтобы проверить, действителен ли токен аутентификации:
public static LoginModel verifyGoogleIdToken(string idToken, string clientId, string connectionString)
{
// Create an HttpClientHandler object and set to use default credentials
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
// Create an HttpClient object
HttpClient httpClient = new HttpClient(handler);
var requestUri = new Uri(string.Format(connectionString, idToken));
HttpResponseMessage httpResponseMessage;
try
{
httpResponseMessage = httpClient.GetAsync(requestUri).Result;
}
catch (Exception ex)
{
return null;
}
if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
{
return null;
}
var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
LoginModel userInfo = JsonSerializer.Deserialize<LoginModel>(response);
if (userInfo.aud == clientId)
return userInfo;
else return null;
}
здесь idToken - токен аутентификации, полученный от клиента. Строка идентификатора клиента - ".apps.googleusercontent.com", а строка соединения - "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= {0}"
Я также могу сохранить эти данные в базе данных, чтобы сохранить отслеживать пользователей, использующих веб-приложение, и я хочу разрешить определенные страницы, которые могут видеть только авторизованные пользователи. Цель состоит в том, чтобы иметь возможность использовать атрибут [Authorize] в контроллере, чтобы разрешить доступ только зарегистрированным пользователям.
Читая больше о topi c, я узнал, что мне нужно использовать Microsoft. AspNetCore.Authentication.Google и в моем Startup.cs мне нужно настроить службу, что-то вроде этого:
services.AddAuthentication().AddGoogle(options =>
{
// Provide the Google Client ID
options.ClientId = Configuration["Authentication:Google:ClientId"];
// Register with User Secrets using:
// dotnet user-secrets set "Authentication:Google:ClientId" "{Client ID}"
// Provide the Google Client Secret
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
// Register with User Secrets using:
// dotnet user-secrets set "Authentication:Google:ClientSecret" "{Client Secret}"
options.ClaimActions.MapJsonKey("urn:google:picture", "picture", "url");
options.ClaimActions.MapJsonKey("urn:google:locale", "locale", "string");
options.SaveTokens = true;
options.Events.OnCreatingTicket = ctx =>
{
List<AuthenticationToken> tokens = ctx.Properties.GetTokens().ToList();
tokens.Add(new AuthenticationToken()
{
Name = "TicketCreated",
Value = DateTime.UtcNow.ToString()
});
ctx.Properties.StoreTokens(tokens);
return Task.CompletedTask;
};
});
Как мне перейти отсюда, чтобы иметь возможность использовать систему аутентификации для авторизованных пользователей? Я нашел некоторую информацию об использовании SignInManager, но я не совсем уверен, как это работает и как я должен реализовать это в своем приложении.