我有一個通過ADFS進行身份驗證的Web應用程序和Web API服務。它們包含在同一個IIS應用程序中,並且Web應用程序可以毫無問題地回調Web API服務。將SAML令牌傳遞到Web API調用
我現在試圖從不同的應用程序調用相同的服務,但在傳遞令牌時遇到問題。我可以用下面的代碼進行驗證和檢索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;
但是,我不知道如何通過SAML到Web API調用。我試過這個:
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服務器進行身份驗證。是否有另一種方式將SAML令牌傳遞給Web api服務?
SAML令牌和REST API不玩好起來。考慮使用OAuth 2.0。 –
我也有同樣的問題,因爲我有Windows Server 2008 R2和Oauth 2.0不可用,您是否設法做到這一點? –
不,我們最終創建了一個使用Windows身份驗證進行身份驗證的獨立IIS應用程序來公開所需的服務。不是最好的解決方案,但它符合我們的需求。 –