Как реализовать авторизацию через Steam на языке Java?

Здравствуйте! Я разрабатываю административную панель для определенной видеоигры в Steam. Мне нужно получить SteamID администратора сервера, чтобы определить его права на выполнение команд и предотвратить несанкционированный доступ, например, чтобы никто не ввёл ID владельца. Для этого я планирую реализовать авторизацию через браузер. Проект написан на Spring, хотя возможно, мне придется перейти на более легковесную платформу. Я увидел один PHP-скрипт по этой теме, но решил не тратить время на его изучение. Могли бы вы посоветовать удобный и понятный способ реализации этой функции, или, если возможно, привести пример?
  • 6 апреля 2025 г. 14:15
Ответы на вопрос 2
Для реализации авторизации через Steam в вашем Java-приложении на Spring вы можете использовать OAuth 2.0, который поддерживается Steam в качестве провайдера аутентификации. Steam предлагает API для получения информации о пользователе, включая его SteamID. Вот пошаговая реализация:

### 1. Регистрация приложения в Steam

Для начала вам нужно зарегистрировать свое приложение в [Steamworks](https://partner.steamgames.com/home). Получив доступ, вы сможете получить ваш `API ключ`, который потребуется для запросов к Steam API.

### 2. Настройка Spring проекта

Вы можете использовать Spring Security для настройки аутентификации с использованием Steam. Для этого вам нужно добавить необходимые зависимости в ваш `pom.xml`:

```xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security.oauth.boot</groupId>
    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    <version>2.3.1</version>
</dependency>
```

### 3. Настройка конфигурации безопасности

Создайте класс конфигурации для Spring Security:

```java
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/login", "/oauth2/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .oauth2Login()
            .loginPage("/login")
            .defaultSuccessUrl("/home", true);
    }
}
```

### 4. Создание контроллеров

Создайте контроллер для обработки логики аутентификации:

```java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class AuthController {

    @GetMapping("/login")
    public String login() {
        return "login"; // Страница с кнопкой для входа через Steam
    }

    @GetMapping("/home")
    @ResponseBody
    public String home() {
        return "Welcome! You are logged in.";
    }
}
```

### 5. Настройка Steam OAuth

Создайте `OAuth2Client` для работы с API Steam. Вам нужно будет настроить `application.properties`:

```properties
spring.security.oauth2.client.registration.steam.client-id=YOUR_STEAM_CLIENT_ID
spring.security.oauth2.client.registration.steam.client-secret=YOUR_STEAM_CLIENT_SECRET
spring.security.oauth2.client.registration.steam.redirect-uri=http://localhost:8080/login/oauth2/code/steam
spring.security.oauth2.client.registration.steam.scope=scope1,scope2
spring.security.oauth2.client.provider.steam.authorization-uri=https://steamcommunity.com/openid/login
spring.security.oauth2.client.provider.steam.token-uri=https://YOUR_TOKEN_ENDPOINT
spring.security.oauth2.client.provider.steam.user-info-uri=https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=YOUR_API_KEY&steamids=
```

### 6. Обработка получения SteamID

После успешной аутентификации у вас будет доступ к информации о пользователе, включая SteamID. Вы можете сохранять его в сессии или базе данных для дальнейшей проверки прав администратора.

### Дополнительные шаги

- Создайте страницу с кнопкой для входа через Steam, которая перенаправляет на `/oauth2/authorization/steam`.
- Обработайте случаи, такие как выход из системы и ошибки аутентификации.
- Запросите дополнительные права на доступ к информации пользователя, если это необходимо.

Этот процесс даст вам базовую реализацию авторизации через Steam в вашем приложении на Java с использованием Spring. Вы можете адаптировать код в зависимости от нужд вашего проекта.
Читай про Oauth2 и смотри в доку стима: 

После того как пользователь авторизуется и ты получишь access token - можешь идти с ним вызывать метод для получения steamid:
https://partner.steamgames.com/doc/webapi_overview...

PS: нифига в жаве не разбираюсь. Выше пример для Spring Boot.
Похожие вопросы