Skip to content

Usage_Setup

Junil Um edited this page Oct 16, 2018 · 1 revision

Startup.cs 파일 구성하기

WebSocketIo 는 ASP.NET Core 환경에서 사용할 수 있는 라이브러리 입니다. ASP.NET Core 환경을 구성하기 위해서는 Startup.cs 파일을 생성해야 합니다. 일반적으로 이 파일은 프로젝트를 생성할 때 함께 생성되는 파일 입니다.

ASP.NET Core Mvc와 WebSocketIo 구성하기

먼저 Mvc 환경을 구성해야 합니다. 일반적으로 ConfigureServices 메서드에서 serrvices.AddMvc() 메서드 대신 services.AddMvcWithWebSocketIo() 메서드로 Mvc 환경을 구성합니다. services.AddMvcWithWebSocketIo() 코드는 WebSocketIo 에서 사용하는 FilterModelBinder 를 구성하고, WebSocketIo 의 여러 서비스를 컨테이너에 등록합니다.

이제 WebSocketIo 서비스가 구성되었습니다. WebSocketIo 의 서비스를 사용하기 위해서 Configure 메서드에서 app.UseWebSocketIo 메서드를 호출하면 됩니다.

완성된 소스 코드는 아래와 같습니다.

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Mvc 구성과 함께 WebSocketIo 서비스 추가
        services.AddMvcWithWebSocketIo();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseWebSockets() // ASP.NET Core의 웹소켓 미들웨어 추가
            .UseWebSocketIo() // WebSocketIo 미들웨어 추가
            .UseMvc();
    }
}

JWT(Json Web Tokens) 과 함께 WebSocketIo 구성하기

JWT는 웹을 통해 사용자를 인증하기 위한 수단이며, WebSocketIo는 JWT 인증을 지원합니다.

JWT 인증을 활성화 하기 위해서는 JWT를 위한 구성 메서드를 WebSocketIo 용으로 변경하면 됩니다.

우선 appsettings.json 파일에 JWT 환경 변수를 설정합니다.

{
  "authentication": {
    "key": "VERY_VERY_SECURE_KEY",
    "issuer": "http://localhost:12345"
  }
}

아래의 완성된 소스 코드는 다음과 같습니다.

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvcWithWebSocketIo();

        // JWT 인증을 위한 매개변수 설정
        var jwtTokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = _configuration["authentication:issuer"],
            ValidAudience = _configuration["authentication:issuer"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["authentication:key"]))
        };

        // ASP.NET Core 의 인증 서비스 추가와 WebSocketIo 환경에서 JWT를 사용하기 위한 구성을 추가
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearerWithWebSocketIo(options =>
            {
                options.TokenValidationParameters = jwtTokenValidationParameters;
            });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseWebSockets()
            .UseWebSocketIo()
            .UseAuthentication() // 인증 미들웨어 추가
            .UseMvc();
    }
}

Clone this wiki locally