4

안전이 다른 웹 응용 프로그램을 식별

아이덴티티 서비스 : Thinktecture 신원 서비스 V2
응용 프로그램 1 : Asp.net MVC 5 응용 프로그램
응용 프로그램 2 : ASP를. net 웹 API 응용 프로그램

안전이 다른 웹 응용 프로그램 서비스를

위의 응용 프로그램 1과 응용 프로그램 2는 서로 다른 프로젝트이며 다른 서버에서 호스팅됩니다. 이제 내 시나리오는
입니다. 1. ID 서비스로 응용 프로그램 1을 보호하고 싶습니다.
2. 신원 확인 서비스로 응용 프로그램 2를 보호하고 싶습니다.

사용 사례 1 : 사용자 액세스 응용 프로그램 1이 신원 서비스의 로그인 페이지로 리디렉션해야하는 경우, 한 번 나는 자격 증명을 입력하고, 같은 이유로 나를 응용 프로그램을 액세스 할 수 있도록 응용 프로그램 1에 로그인 2.
사용 사례 2 : 사용자가 Identity 서비스에 로그인하지 않고 Application 2에서 API에 액세스하려고하면 요청이 거부되어야합니다.

+0

두 개의 서로 다른 도메인이 있습니까? app1.domain1.com 및 app2.domain2.com을 좋아합니까? –

+0

예, 2 개의 다른 도메인이 있습니다. –

+0

@DurgaPrasad 내 업데이트를 참조하십시오. –

답변

0

확인. 나는 지금 똑같은 일을 똑같이했다. 그 일을 끝내기 위해 필요한 모든 것은 here로 작성되었습니다. IdentityServer를 사용하는 경우 RP의 토큰 유형을 JWT로 구성해야합니다.

enter image description here 이렇게하면 인증 된 MVC 5 응용 프로그램에서 토큰을 나중에 추출 할 수 있습니다. 이를 수행 한 다음) 해당 토큰을 웹 API로 보냅니다. 그런 다음 웹 API에 Microsoft의 JwtSecurityTokenHandler 클래스를 사용하여 해당 토큰을 수락하도록 요청해야합니다. 이 클래스는 두 개의 매개 변수를 받아들이는 ValidateToken() 메소드를 가지고 있습니다. 첫 번째는 웹 API에 대한 요청의 인증 헤더에 넣는 액세스 토큰이고 두 번째는 유효성 검사 매개 변수입니다. 이는 IdentityServer의 config에서 정의한 것입니다.

validationParams = new TokenValidationParameters 
      { 

       AllowedAudiences = _allowedAudiencesAndSigningKeys.Select(x => x.Key), 
       ValidIssuer = ConfigurationManager.AppSettings["IssuerIdentity"], 
       ValidateIssuer = true, 
       SigningTokens = _allowedAudiencesAndSigningKeys.Select(x => new BinarySecretSecurityToken(Convert.FromBase64String(x.Value))) 
      }; 

경청자 (들)은 발행자 이름 (사용자의 신원 서버 이름)에 대한 액세스를 허용 할/영역 (들) 및 신원 서버에 정의 된 응용 프로그램의 서명 대칭 키 (들) 에 대한 광범위한 접근을 원합니다. ValidateToken() 메서드는 토큰에서 추출 된 클레임 목록을 사용하여 ClaimsPrincipal을 반환합니다. 이 모든 작업을 수행하는 코드는 메시지 처리기에 넣을 수 있습니다.

public static void Configure(HttpConfiguration config) 
{ 
    var authNConfig = new AuthenticationConfiguration(); 
    config.MessageHandlers.Add(new MyTokenValidationHandler()); 
} 
0

순수 SAML 토큰을 사용하여이를 수행 할 수있는 방법을 발견했습니다. 트릭은 Identity Server에서 위임 계정을 만들어 웹 응용 프로그램이 특정 영역 (서비스가있는 곳)에 ID를 위임 할 수있게해야한다는 것입니다. 그런 다음 웹 응용 프로그램에서 사용자가 이미 서비스에 액세스하는 데 사용하는 새 토큰을 가져와야하는 토큰을 사용하여 서비스 호출을 작성합니다.

매우 비슷한 질문을하고 직접 대답했습니다. here.