2012-10-17 4 views
1

저는 현재 iPad 응용 프로그램이 기존 웹 응용 프로그램에 액세스해야하는 프로젝트에서 작업하고 있습니다. iPad 응용 프로그램은 내부적으로 개발되었으며 따라서 신뢰할 수있는 응용 프로그램입니다. 그러나 웹 응용 프로그램에서 제공하는 데이터는 민감하므로 iPad에 클라이언트 자격 증명을 저장하지 않으려합니다. 또한 일반 사용자 액세스에 영향을주지 않으면 서 iPad 액세스를 취소 할 수있는 기능이 필요합니다.dotnetopenauth - 새로 고침 토큰에 여분의 데이터를 추가하는 방법은 무엇입니까?

위와 같이 가정하면 OAuth2 자원 소유자 암호 자격증/허가서는 기존 라이브러리 이후 DotNetOpenAuth로 구현 한 Google 요구 사항에 적합합니다.

그러나 리소스 서버에 대한 액세스 및 새로 고치기 토큰에 메타 데이터를 추가해야합니다. 권한 부여 서버는 IAuthorizationServerHost.CreateAccessToken 방법의 우리의 구현에 AuthorizationServerAccessToken.ExtraData 속성을 통해 메타 데이터를 추가 :

public AccessTokenResult CreateAccessToken(IAccessTokenRequest accessTokenRequestMessage) 
{ 
    var accessToken = new AuthorizationServerAccessToken(); 

    // Add some extra data to access token 
    accessToken.ExtraData.Add("server_parameter1", this.ServerValue1); 
    accessToken.ExtraData.Add("server_parameter2", this.ServerValue2); 

    // Set ResourceServerEncryptionKey properties etc 

    return new AccessTokenResult(accessToken); 
} 

이 수행 정확하게 우리가 그러나 동일한 "ExtraData가"에 포함되지 않은 액세스 토큰 원하는 액세스 토큰이 만료 될 때 문제를 일으키는 새로 고침 토큰으로, 이전 액세스 토큰이 삭제 된 이후 추가 데이터가 효과적으로 손실되기 때문에 새로 고침해야합니다.

액세스 토큰과 비슷한 방식으로 현재 버전의 DotNetOpenAuth에서 새로 고침 토큰 "ExtraData"를 채우는 것이 가능하면 조언 할 수 있습니까?

답변

1

아니요, 현재 새로 고침 토큰에 여분의 데이터를 포함시키는 방법이 있다고 생각하지 않습니다. 이것이 왜 있는지에 대해 조금 이야기 해 봅시다.

먼저 개발 여부와 상관없이 신뢰할 수있는 iPad 앱과 같은 것은 없습니다. 문제는 배포하는 앱 (심지어 내부적으로)은 비밀을 유지할 수 없다는 것입니다. 모든 client_secret, 인증서 등이 손상 될 수 있습니다. 따라서 배포하는 응용 프로그램은 서버에 자신을 인증 할 수 없습니다. 서버가 클라이언트를 인증 할 수 없으면 서버는 클라이언트를 신뢰할 수 없습니다.

이제 시나리오를 조금 더 살펴 보도록하겠습니다. 더 많은 의견이 있으면 [email protected]에 대한 토론을 계속하는 것이 가장 좋습니다. 클라이언트는 결국 자원 서버에서 끝내기를 원하는 데이터를 가지고 있습니다. 현재 해당 데이터를 먼저 권한 서버를 통해 전달한 다음 액세스 토큰을 통해 자원 서버로 전달하려고합니다. 왜 그런가요? 클라이언트가 액세스 토큰과 함께 리소스 서버에 직접 데이터를 보내지 않는 이유는 무엇입니까? 대답이 리소스 서버가 클라이언트를 신뢰해서는 안되는 경우 액세스 토큰을 통해 리소스 서버를 보내서 얻은 것은 위 단락에서 설명한 이유로 보안에 대한 잘못된 인식입니다. 클라이언트가 자원 서 v에 잘못된 정보를 제공 할 수있는 경우, 허 용된 데이터를 권한 서 v에 제공 할 수도 있습니다.

액세스 토큰에서 추가 데이터를 유효하게 사용하는 한 가지는 인증 서버가 알고있는 데이터로, 클라이언트에서 가져온 데이터는 아닙니다. 이 경우 액세스 토큰이 작성 될 때마다 해당 데이터를 조회 할 수 있으므로 새로 고침 토큰에 저장할 필요가 없습니다.

+0

죄송합니다. 내 질문에 오해의 소지가있었습니다. 추가 데이터는 실제로 인증 서버에서 제공되며 클라이언트가 요청할 때 리소스 서버에 필요합니다. 클라이언트는 추가 데이터를 알지 못합니다. 내가 분명히 할 질문을 편집했습니다. 그러나 첫 번째 의견으로 판단하면 어쨌든 가능하지 않습니다. 이 경우 알려 주시면 예외로 표시해 드리겠습니다. – lawst

+0

CreateAccessToken 메서드에서 사용자 이름을 확인할 수 있습니까? 코드를 검토 한 결과 액세스 토큰을 만들 때 사용자를 확인할 수 있으면 새로 고침 토큰에 여분의 데이터가 저장되는 것을 피할 수있었습니다. – lawst

+0

오른쪽. 그것은 불가능합니다.권한이 부여 된 사용자에게 액세스 권한 만 있으면됩니다. 이것은 단지'CreateAccessToken'이 그 매개 변수를 빠뜨린 것을 감독하는 것일뿐입니다. [곧 수정 될 것입니다] (https://github.com/DotNetOpenAuth/DotNetOpenAuth/issues/219). –

관련 문제