WIFI身份委派给Web API REST服务

时间:2014-06-27 19:32:35

标签: c# rest asp.net-web-api wif claims-based-identity

我读过这篇文章:Identity Delegation with AD FS 2.0 Step-by-Step Guide  关于如何使用WIF从ASP.NET应用程序到后端WCF服务执行身份委派。我目前有一个ASP.NET WebAPI REST服务,我希望能够使用身份委派从我的ASP.NET应用程序调用,但我找不到任何有关如何实现此目的的信息。上面提到的technet文章使用CreateChannelActingAs使用调用用户的安全令牌创建到WCF服务的通道,但显然这种方法不适用于REST API。任何人都可以向我指出任何文章或提供如何使用WIF将身份委托给我的REST服务的描述吗?

我的WebAPI REST服务应用程序已经在Thinktecture的this库的帮助下使用WIF身份验证进行设置和工作。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案(我正在使用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服务不需要任何更改。