我处于同样的情况,并且一切正常。方法如下(我正在使用 Thinktecture Identity Server):
我必须设置一个委托帐户,我的 Web 应用程序使用 ( webappaccount
) 来委托我的服务所在的领域,方法是转到身份委托->在身份服务器中添加领域,并且在我的 Web 应用程序中,我必须进行服务调用我的 STS 提供引导令牌以接收新的安全令牌,然后我可以使用该令牌对我的服务进行身份验证。
在我设置的网络应用程序配置中:
<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
在我的网络应用程序中,访问我的服务的代码如下所示:
BootstrapContext context = ClaimsPrincipal.Current.Identities.First().BootstrapContext as BootstrapContext;
var factory = new WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), _trustUrl);
factory.TrustVersion = TrustVersion.WSTrust13;
factory.Credentials.UserName.UserName = "webappaccount";
factory.Credentials.UserName.Password = "P@ssword";
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Bearer,
AppliesTo = new EndpointReference(_realm),
ActAs = new SecurityTokenElement(context.SecurityToken)
};
var token = factory.CreateChannel().Issue(rst) as GenericXmlSecurityToken;
var client = new HttpClient
{
BaseAddress = _baseAddress
};
client.SetToken("SAML", token.TokenXml.OuterXml);
var response = client.GetAsync("api/values").Result;
我的 REST 服务不需要任何更改。