2015-02-05 4 views
3

일반 폼 인증 외에도 WebClient 개체가 Thinktecture IdentityModel을 사용하여 설정된 웹 API DAL이 제공하는 API/토큰 URL에 대한 기본 인증을 수행하도록 폼 인증 로그인 프로세스를 수정하는 것이 어렵지 않습니다 . 반환 된 세션 토큰은 나중에 DAL을 호출 할 때 사용할 수 있도록 세션 사전에 저장 될 수 있습니다.브리징 폼 인증 및 OAUTH

문제는 이러한 토큰의 수명이 다릅니다.

필요에 따라 세션 토큰을 다시 생성하기 위해 localStorage에서 자격 증명을 유지하도록 응용 프로그램을 다시 작성할 수는 있지만 보안 측면에서는보기에 좋지 않습니다.

아마도 이러한 시스템 중 하나 또는 둘 모두에서 토큰 내구성을 구성 할 수있는 방법이 있지만 사용할 토큰 내구성 및 토큰 수명을 검색하려했지만 결과가 도움이되지 않았습니다.

두 가지 유형의 웹 앱 보안을 조정하는 최선의 방법에 대한 철학적 및 실용적인 제안에 관심이 있습니다. 나는이 주제에 대해 이미 답을 찾지 못했다면, 내가 무엇을 검색해야할지 알았다면 매우 놀랄 것입니다.


일부 사람들은 내가 묻는 것에 대해 명확하지 않기 때문에 약간의 배경 지식이 있습니다.

Thinktecture IdentityModel를 사용하는 별도의 DAL 응용 프로그램으로 폼 기반 보안

난 그냥 추가 한 새로운 재료를 사용하는 큰 추악한 오래된 학교 ASP.NET 웹 응용 프로그램이있다. 이 DAL은 두 개의 응용 프로그램 인 ASP.NET 응용 프로그램과 Durandal SPA에서 사용됩니다.

신원 확인에 동일한 데이터베이스를 사용하므로 ID 공간이 동일합니다.

이전 앱의 로그인 프로세스가 수정되어 Thinktable IdentityModel에서 자격 증명을 제시하고 세션 토큰을 얻습니다. 이 토큰은 이전 앱이 DAL을 호출 할 때마다 표시 될 Session 컬렉션에 삽입됩니다.

이전 응용 프로그램을 시작하고 물건을 채우고 브라우저를 닫은 다음 브라우저를 다시 연 다음 로그인하지 않은 로그인 한 ASP.NET 응용 프로그램이 없으므로 세션 토큰을 만들 수 없습니다. 이게 문제 야. 동일한 라이프 사이클을 사용하려면 두 개의 토큰이 필요합니다.


나는 가능한 접근법을 생각해 보았습니다. 나는 사람들이 그 공로에 대해 그들의 의견을 표현하거나 세련된 제안 의견을 낼 수 있도록 대답으로 아래에 제시 할 것입니다. 다른 아이디어를 생각하면 대답으로 던져 버리고 똑같이 할 수 있기를 바랍니다.

+0

두 토큰에 대해 짧은 토큰의 수명을 사용할 수없는 이유가 있습니까? 첫 번째 만료시 재 인증이 필요하며 수명이 더 긴 토큰을 폐기하거나 그냥 교체하십시오. – mpowered

+0

당신이 찾고있는 것은 auth token expiration configuration입니다. 그러나 귀하의 질문은 귀하가하고있는 일과 귀하가 습득하려고 시도하고있는 것에 대한 세부 사항이 매우 낮습니다. 왜 OAUTH 토큰으로 localStorage (클라이언트 측)를 사용했으며 auth (서버 측)도 작성 했습니까? – Bishoy

답변

0

서버에서 나는 세션 토큰을 생성 할 때와 나중에 ASP.NET 세션이없는 상태에서 사용자 ID를 알고 있습니다.

내가 필요로하는 것은 쿠키와 동일한 서버입니다. "서버 측 쿠키"에 대한 빠른 검색은 몇 개의 기사를 반환했으며, 그 중 하나는 1999 년에 내가 쓴 글이었습니다.이 모두가 "데이터베이스 사용"으로 귀결되었습니다.

그래서 ... 데이터베이스를 사용할 수 있습니다. 우리는 사용자 테이블을 가지고 있는데, 컬럼을 추가 할 수 있습니다. 아니면 UID, SessionToken 및 CreatedAt의 세 열이있는 다른 테이블을 만들 수 있습니다.

CreatedAt는 토큰이 만료되었는지 여부와 내가 새로운 로그인을 강제하기 위해 ASP.NET 세션을 만료시킬 수 있는지 여부를 결정할 수있는 날짜 시간입니다.


나는 이것에 대한 변형을 사용했다. 필자의 경우, UID로 무장하여 사용자 테이블에서 자격 증명을 가져올 수 있습니다. 그래서 저는 토큰과 생성 시간을 Session에 넣었습니다. 그렇지 않으면 위와 같이 진행했습니다. 세션에 토큰 만료 시간이 없거나 토큰이 만료 된 경우 자격 증명을 가져 와서 토큰을 요청한 다음 토큰과 만료를 업데이트합니다.

이 모든 것은 더미 (유효하지 않은) 토큰을 반환하는 예외 처리기로 래핑되며 그 결과는 동일한 내구성의 토큰과 동일합니다.

내가 영구 테이블을 사용하지 않았다는 것을 알게 될 것입니다. 이렇게하면 오류 지점이 줄어들고 데이터베이스 스키마를 편집 할 수있는 기능에 의존하지 않게됩니다. 테이블에서 상태를 관리하는 비용은 적어도 새 토큰을 생성하는 비용만큼 높았을 것입니다.