Confluence 에 심각한 보안 취약점이 발견되었으니 사용자분들은 업그레이드 하세요.!
 
1
0
-1

안녕하세요. 라라벨 프레임워크를 사용하여 프로젝트를 진행중입니다.


사용하고 있는 API 라이브러리의 동작이 다음과 같이 되어 있습니다.

  1. 클라이언트 세션을 설정한다.
  2. 설정된 세션에 아이디/비밀번호로 인증을 시도한다.
  3. 인증이 완료된 $client 객체를 주입한다.
use Client;
use Download;


public function __construct()
{
    $client = new Client('session name');
    $client->authenticate('id', 'passwd');

    $this->ds = new Download($client)
}




위 동작을 진행할 경우  화면을 리프레시 할 때마다 인증 절차를 매회 다시 진행하게 되며, 결과적으로 $client→authenticate() 의 인증정보는 화면이 바뀔때마다 변경되는 문제가 발생하였습니다.


이 문제를 해결하고자 서비스 컨테이너에 bind 하거나 singleton 을 사용하여 Client 인스턴스가 있을 경우의 처리를 해주면 될 것 같아서 다음과 같이 적용해봤습니다.


그러나 문제는 해결되지 않고 매접속마다 새로운 인증정보를 출력하는 것을 확인하였습니다.

// ServiceProvider
$this->app->singleton(Client::class, function ($app) {
    $client = new Client('session name');
    $client->authenticate('id', 'passwd');

    return $client;
});


public function __construct(Client $client)
{
    $this->ds = new Download($client)
}

궁금한 점은 다음과 같습니다.

  1. 지금 문제가 발생하는 이유가 서비스 컨테이너나 서비스 프로바이더에 대한 이해가 부족해서 생기는 문제인지요?
  2. 서비스 컨테이너/프로바이더 문제이기도 하지만, 위의 문제를 다른 방법으로 해결할 수도 있는지요?


감사합니다.

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      어떤 서비스인지 정확히 모릅니다.

      제 경험에 따르면, VendorClient::authenticate(): AccessToken 처럼 작동했고, 반환된 AccessToken을 캐시에 저장해두고 매번 인증 요청을 하지 않았습니다. 바꾸어 말하면, VendorClient 인스턴스만 서비스 프로바이더에 등록했고, 애플리케이션에서 주입 받은 VendorClient의 authenticate()를 호출했습니다. 그리고 그 결과는 캐시했고요.

      도움이 되면 좋겠네요.

      1. Gusto

        제 설명이 부족한 것 같습니다. 답변 고맙습니다.

      CommentAdd your comment...