使用一个标识服务保护两个不同的web应用程序
身份服务: Thinktecture身份服务V2
应用1: Asp.net MVC5应用
应用程序2: Asp.net Web API应用程序
上面的应用程序1和应用程序2是不同的项目,托管在不同的服务器上。现在我的场景是
用例1:如果用户访问应用程序1,它应该重定向到身份服务登录页面,一旦我输入凭据并登录到应用程序1,相同的令牌就允许我访问应用程序2。
用例2:如果用户在没有登录到身份服务的情况下尝试从应用程序2访问任何API,则请求应该被拒绝。
发布于 2014-06-21 12:27:14
好的。我刚才也做了同样的事情。完成这项工作所需的一切都是用here编写的。如果您使用的是IdentityServer,则需要将RP的Token类型配置为JWT:

这允许您稍后从经过身份验证的MVC5应用程序中提取令牌(请参阅上面的链接以了解如何执行此操作),然后将令牌发送到您的Web API。然后,您需要使用微软的JwtSecurityTokenHandler类告诉您web api接受该令牌。这个类有一个ValidateToken()方法,它接受两个参数,第一个参数是您放入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 /Realm名称)以及您在Identity Server中定义的、要授予访问权限的应用程序的签名对称密钥。ValidateToken()方法返回一个ClaimsPrincipal,其中包含从令牌中提取的声明列表。完成这一切的代码可以放在一个消息处理程序中:
public static void Configure(HttpConfiguration config)
{
var authNConfig = new AuthenticationConfiguration();
config.MessageHandlers.Add(new MyTokenValidationHandler());
}发布于 2014-07-04 00:52:18
我找到了一种使用纯SAML令牌来实现此目的的方法。诀窍是您需要在Identity Server中创建一个委派帐户,以允许您的web应用程序将身份委派给特定领域(您的服务所在的领域)。然后,在web应用程序中,您使用用户已有的令牌进行服务调用,以获得新的令牌,您将使用该令牌来访问您的服务。
我问了一个非常类似的问题,并亲自回答了here。
https://stackoverflow.com/questions/24177045
复制相似问题