2017-09-22 1 views
4

BizTalk 송신 어댑터를 통해 나머지 API 서비스를 호출해야합니다. API는 단순히 인증/권한 부여를 위해 헤더의 토큰을 사용합니다. 나는 HttpClient를를 사용하여 C# 콘솔 응용 프로그램이 테스트하고 그것을 잘 작동합니다 :BizTalk 2016 : API 토큰을 사용하는 HTTP 송신 어댑터 사용 방법

string apiUrl = "https://api.site.com/endpoint/<method>?"; 
     string dateFormat = "dateFormat = 2017-05-01T00:00:00"; 

     using (var client = new HttpClient()) 
     { 

      client.DefaultRequestHeaders.Add("token", "<token>"); 
      client.DefaultRequestHeaders.Add("Accept", "application/json"); 

      string finalurl = apiUrl + dateFormat; 
      HttpResponseMessage resp = await client.GetAsync(finalurl); 
      if (resp.IsSuccessStatusCode) 
      { 
       string result = await resp.Content.ReadAsStringAsync(); 
       var rootresult = JsonConvert.DeserializeObject<jobList>(result); 
       return rootresult; 

      } 
      else 
      { 
       return null; 
      } 
     } 

그러나 내가 전화를하고 응답을 처리하기 위해 BizTalk를 사용하고 싶습니다.

wcf-http 어댑터를 사용하여 보안을 위해 '전송'을 선택 했으므로 (보안이 필요하므로 (보안이 필요합니까 (?)) 자격 증명 유형이 지정되지 않고 토큰이있는 헤더가 '메시지 '탭을 클릭하십시오. 그러나 예외로 인해 실패합니다. System.IO.IOException : 원격 파티가 전송 스트림을 닫았 기 때문에 인증에 실패했습니다.

이 특정 시나리오에 대한 검색을 시도했지만 해결책을 찾을 수 없습니다. OAUth 처리에 대한 제안이있는 this 문서를 찾았지만 BizTalk 2016을 사용해도 여전히 간단한 사용자 지정 어셈블리를 만들어야한다는 점에 놀랐습니다.

wcf-http 어댑터에서이 작업을 수행하는 방법을 아는 사람이 있습니까?

답변

2

예, 사용자 지정 끝점 동작을 작성하고 송신 포트에 추가해야합니다. 사실 WCF-WebHttp 어댑터도 Basic Auth doesn't work이므로 현재이 문제를 해결하기 위해 엔드 포인트 동작을 작성하고 있습니다.

OAuth의 문제 중 하나는 모든 사람들이 따르는 표준이 하나도 없다는 것입니다. 지금까지는 다른 방식으로 구현 한 것처럼 2 가지 OAuth 동작을 작성해야했습니다. 하나는 비밀과 타임 스탬프 해시를 사용하여 토큰을 가져와야하고 다른 하나는 기본 인증을 사용하여 토큰을 가져와야합니다. 또한 그들 중 하나는 동일한 cred를 사용하여 여러 토큰을 얻을 수 있지만 다른 토큰은 즉시 토큰을 만료시킬 수 있습니다.

나는에 대한 사용자 지정 동작을 작성 했어 또 다른 것은

는 최종 점은 웹 사이트를 허용하지 않는 경우 실패합니다 다음 R2는 TLS 1.0 시도 기본 BizTalk 2013 년으로 예상하고 TLS의 버전입니다. 당신은 어쩌면 누군가가 소스를 자신의 솔루션을 열 것 Add support for OAuth 2.0/OpenID Connect authentication

에 투표하여이 기능을하고자하는 마이크로 소프트에 대한 피드백은

수 있습니다. 공지 사항 참조 : BizTalk Server embrace open source!

2

알아 냈어. 클라이언트 자격 증명 유형으로 '인증서'를 사용해야했습니다. '전송'보안 및 전송 클라이언트 자격 증명 유형에 대한 '인증서'메시지 탭에서 아웃 바운드 HTTP 헤더 상자에

  1. 추가 토큰 선택 :

    난 그냥했다.

  2. 브라우저를 통해 API 웹 사이트에서 인증서를 수동으로 다운로드하고 로컬 서버 인증서 저장소에 설치했습니다.
  3. 그런 다음 '찾아보기'버튼 (사용 가능한 인증서를 스크롤하고 연결하려는 API/웹 사이트 인증서를 선택해야 함)을 통해 어댑터의 해당 필드에서 해당 인증서와 손도장을 선택했습니다.

피들러를 실행하고 어댑터 프록시 설정을 로컬 피들러 주소 (http://localhost:8888)로 설정했을 때 우연히이를 발견했습니다.필들은 Fiddler가 원격 서버에 TLS 연결/인증서 (필자는 tls1.2를 사용할 수 있음)를 협상 한 이후로 메시지가 통과 할 수 있었지만 어댑터와 원격 API 서버 간에는 직접적으로 연결할 수 없음을 깨달았습니다 (Fiddler가 실행되지 않았을 때) .

관련 문제