ADFS를 통해 인증하는 웹 응용 프로그램 및 웹 API 서비스가 있습니다. 이들은 동일한 IIS 응용 프로그램에 포함되어 있으며 웹 응용 프로그램은 문제없이 웹 API 서비스에 다시 호출합니다.웹 API 호출에 SAML 토큰 전달
다른 응용 프로그램에서 동일한 서비스를 호출하려고하는데 토큰을 전달하는 데 문제가 있습니다. 나는 다음과 같은 코드를 가진 SAML 토큰을 인증하고 검색 할 수 있어요 :
var stsEndpoint = "https://MyAdfsServer/adfs/services/trust/13/UsernameMixed";
var reliantPartyUri = "https://MyDomain/AppRoot/";
var factory = new Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
new EndpointAddress(stsEndpoint));
factory.TrustVersion = System.ServiceModel.Security.TrustVersion.WSTrust13;
// Username and Password here...
factory.Credentials.UserName.UserName = @"Domain\UserName";
factory.Credentials.UserName.Password = "Password";
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
AppliesTo = new EndpointAddress(reliantPartyUri),
KeyType = KeyTypes.Bearer,
};
var channel = factory.CreateChannel();
var token = channel.Issue(rst) as GenericXmlSecurityToken;
var saml = token.TokenXml.OuterXml;
그러나, 나는 웹 API를 호출에 SAML을 전달하는 방법을 모르겠어요. 나는 이것을 시도했다 :
using (var handler = new HttpClientHandler()
{
ClientCertificateOptions = ClientCertificateOption.Automatic,
AllowAutoRedirect = false
})
{
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("https://MyDomain/AppRoot/api/");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("SAML", saml);
HttpResponseMessage response = client.GetAsync("MyService/Get/").Result;
// Get the results...
var result = response.Content.ReadAsStringAsync().Result;
var status = response.StatusCode;
}
}
이 302 상태 코드를 반환하고 인증을위한 ADFS 서버로 나를 리디렉션을 시도하고 있습니다. 웹 API 서비스에 SAML 토큰을 전달하는 또 다른 방법이 있습니까?
SAML 토큰 및 REST API를 함께 잘 재생되지 않습니다. OAuth 2.0 사용을 고려하십시오. –
Windows Server 2008 R2가 있고 Oauth 2.0을 사용할 수 없기 때문에 동일한 문제가 발생합니다. 어떻게 처리 했습니까? –
아니요, Windows 인증을 통해 인증 된 별도의 IIS 응용 프로그램을 만들어 필요한 서비스를 노출했습니다. 최선의 해결책은 아니지만 우리의 요구에 부합합니다. –