WIF身份委托给WebAPI REST服务

本文关键字:WebAPI REST 服务 身份 WIF | 更新日期: 2023-09-27 18:10:45

我已经阅读了这篇文章:AD FS 2.0身份授权分步指南介绍了如何在ASP中使用WIF执行身份委托。. NET应用程序到后端WCF服务。我目前有一个ASP。. NET WebAPI REST服务,我希望能够从我的ASP调用。. NET应用程序使用身份委托,但我找不到任何关于如何实现这一点的信息。上述技术文章使用CreateChannelActingAs使用调用用户的安全令牌创建到WCF服务的通道,但显然此方法不适用于REST API。谁能给我指出任何文章或提供描述如何使用WIF将身份委托给我的REST服务?

我的WebAPI REST服务应用程序已经设置好,并在Thinktecture的这个库的帮助下使用WIF身份验证工作。

WIF身份委托给WebAPI REST服务

我找到了解决方案(我使用Thinktecture Identity Server)。我必须设置一个委托帐户,我的web应用程序使用(webappaccount)通过Identity delegation ->Add realm 在身份服务器中委托到我的服务所在的领域,在我的web应用程序中,我必须向我的STS发出服务调用,提供引导令牌来接收一个新的安全令牌,然后我可以使用该令牌对我的服务进行身份验证。

在web应用程序配置中我设置:

<system.identityModel>
    <identityConfiguration saveBootstrapContext="true">

,在我的web应用程序中,访问我的服务的代码如下:

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服务不需要任何更改