2017-05-09 7 views
0

IdentityServer를 사용하여 API에 대한 액세스를 제어하고 있습니다. 나는 토큰을 발행하고 보안 API에 대한 액세스 요청의 유효성을 확인하는 별도의 인증 API를 가지고있다.Identity Server 새로 고침 토큰 리소스 소유자 비밀번호 자격증 명 흐름

사용자에게 보안 웹 응용 프로그램을 통해 액세스 토큰을 생성 할 수있는 권한을 부여합니다. 리소스 소유자 암호 자격 증명 흐름을 사용하고 있습니다.

사용자가 로그인하여 요청하지 않고 새로 고침 토큰을 발행 할 수있는 방법이 있습니까? 아니면 초기 액세스 토큰의 만료를 설정할 수있는 방법이 있습니까?

코드

내가 토큰을 생성하기 위해 사용하고 코드입니다.

DiscoveryResponse disco = await DiscoveryClient.GetAsync("http://localhost:27144"); 
    TokenClient tokenClient = new TokenClient(disco.TokenEndpoint, "My Client", "MySecret"); 
    TokenResponse tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("testUser", "testPassword"); 
+0

자세한 정보를 제공해 주시겠습니까? 'AllowOfflineAccess = True'를 설정하면 IdentityServer는 자동으로'refresh_token'을 반환합니다. 당신은 또한'AccessTokenLifetime'을 설정할 수 있습니다 ... – moritzg

+0

@moritzg allowOfflineAccess 플래그를 true로 설정하고 absoluteRefreshTokenLifetime을 31540000으로 설정합니다.이 값은 1 년이어야합니다. 그러나 토큰 응답 오브젝트는 expiresIn 특성에 대해 3600을 리턴합니다. refresh_token도 반환되는 것을 볼 수 있습니다. 권한 부여 헤더에이를 전달합니까? –

+0

"토큰 응답 객체"는 어떤 토큰을 의미합니까? – moritzg

답변

1

예.이 작업은 새로 고침 토큰을 사용하여 수행 할 수 있습니다. 클라이언트 설정

    • 설정 AllowOfflineAccess = true는 토큰 응답이 이제 AccessToken 외에 RefreshToken 포함됩니다 초기 토큰 요청

    의 범위 offline_access 포함합니다. AccessToken을 클라이언트에 반환하고 RefreshToken을 누르고 있습니다.

    새 AccessToken이 필요한 경우 TokenClient에서 RequestRefreshTokenAsync 메서드를 사용하여 요청하십시오. 이름이 혼란 스럽습니다. 실제로 RefreshToken에서 새 AccessToken을 요청하고 있습니다.

    TokenResponse refreshTokenResponse = await tokenClient.RequestRefreshTokenAsync("RefreshTokenGoesHere"); 
    

    RefreshToken 만료를 관리하는 두 가지 방법이 있습니다. 이 속성은 RefreshTokenExpiration 의해 제어된다

    • 유통을
    • 절대 만료 만료 슬라이딩 설정된 경우

    슬라이딩 리프레시 토큰 수명 각 리프레시 후에 갱신된다.

    토큰을 재사용 할 수 있는지 또는 1 회만 사용할 수 있는지를 결정하는 RefreshTokenUsage 속성도 있습니다. 1로 설정하면 슬라이딩 만료와 함께 만 사용하면 각 요청에 대해 보유 할 새 RefreshToken을 얻게됩니다.

    만료시기는 SlidingRefreshTokenLifetimeAbsoluteRefreshTokenLifetime입니다. 둘 다 simulatenousely 사용할 수 있습니다. 예를 들어 슬라이딩 새로 고침 토큰이 활성화 된 경우 슬라이딩 만료는 30 일이고 절대 만료는 1 년이 될 수 있습니다. 이렇게하면 사용자는 30 일 동안 로그인하지 않은 상태에서 다시 로그인 할 수 있지만 로그인하지 않은 상태에서 1 년 동안 활성 상태로 유지됩니다.

    모든 경우에 RefreshToken을 사용자에게 반환해서는 안되며 액세스 토큰 만 반환해야합니다. 새로 고침 토큰과 만료 날짜를 유지하려면 데이터 저장 메커니즘이 필요합니다.

  • +0

    # Kevin Gysberg 범위에서 apiname을 사용하여 offline_access를 전달할 수있는 방법 –