使用一个识别服务保护2个不同的Web应用程序

时间:2014-06-12 05:29:06

标签: asp.net-mvc security asp.net-web-api thinktecture-ident-server

使用一个身份识别服务保护2个不同的Web应用程序

身份服务:Thinktecture身份服务V2
应用1:Asp.net MVC 5申请
应用2:Asp.net Web API应用程序

上述Applcation 1和Application 2是不同的项目,托管在不同的服务器上。现在我的情景是
1.想要使用身份服务保护应用程序1 2.想要使用身份服务保护应用程序2
使用案例1:如果用户访问应用程序1,它应该重定向到身份服务登录页面,一旦我输入凭据并登录到应用程序1,相同的令牌允许我访问应用程序2。 用例2:如果用户尝试从应用程序2访问任何API而无需登录身份服务,则该请求应拒绝。

2 个答案:

答案 0 :(得分:0)

确定。我刚刚做了同样的事情。完成所需的一切都是here。如果您正在使用IdentityServer,则需要将RP的令牌类型配置为JWT:

enter image description here  这允许您稍后从经过身份验证的MVC 5应用程序中提取令牌(请参阅上面的链接以了解如何执行此操作),然后将该令牌发送到Web API。然后,您需要告诉您web api接受该令牌,使用Microsoft的JwtSecurityTokenHandler类。这个类有一个ValidateToken()方法,它接受2个参数,第一个是你放入你的Web API请求的auth头中的访问令牌,第二个,验证参数基本上是你的#&在IdentityServer的配置中定义:

validationParams = new TokenValidationParameters
            {

                AllowedAudiences = _allowedAudiencesAndSigningKeys.Select(x => x.Key),
                ValidIssuer = ConfigurationManager.AppSettings["IssuerIdentity"],
                ValidateIssuer = true,
                SigningTokens = _allowedAudiencesAndSigningKeys.Select(x => new BinarySecretSecurityToken(Convert.FromBase64String(x.Value)))
            };

您要允许访问的受众/域,发行者名称(您的身份服务器名称)以及您在Identity Server中定义的应用程序的签名对称密钥进入。 ValidateToken()方法返回ClaimsPrincipal,其中包含从令牌中提取的声明列表。执行所有这些操作的代码可以放在消息处理程序中:

public static void Configure(HttpConfiguration config)
{
    var authNConfig = new AuthenticationConfiguration();
    config.MessageHandlers.Add(new MyTokenValidationHandler());
}

答案 1 :(得分:0)

我找到了一种使用纯SAML令牌的方法。诀窍是您需要在Identity Server中创建一个委派帐户,以允许您的Web应用程序将身份委派给特定领域(您的服务所在的领域)。然后,在Web应用程序中,您使用用户已拥有的令牌进行服务调用,以获取用于访问服务的新令牌。

我问了一个非常相似的问题并自己回答here