首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一个标识服务保护两个不同的web应用程序

使用一个标识服务保护两个不同的web应用程序
EN

Stack Overflow用户
提问于 2014-06-12 13:29:06
回答 2查看 356关注 0票数 4

使用一个标识服务保护两个不同的web应用程序

身份服务: Thinktecture身份服务V2

应用1: Asp.net MVC5应用

应用程序2: Asp.net Web API应用程序

上面的应用程序1和应用程序2是不同的项目,托管在不同的服务器上。现在我的场景是

  1. 希望使用标识服务保护应用程序%1。
  2. 希望使用标识服务保护应用程序%2。

用例1:如果用户访问应用程序1,它应该重定向到身份服务登录页面,一旦我输入凭据并登录到应用程序1,相同的令牌就允许我访问应用程序2。

用例2:如果用户在没有登录到身份服务的情况下尝试从应用程序2访问任何API,则请求应该被拒绝。

EN

回答 2

Stack Overflow用户

发布于 2014-06-21 12:27:14

好的。我刚才也做了同样的事情。完成这项工作所需的一切都是用here编写的。如果您使用的是IdentityServer,则需要将RP的Token类型配置为JWT:

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

代码语言:javascript
复制
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,其中包含从令牌中提取的声明列表。完成这一切的代码可以放在一个消息处理程序中:

代码语言:javascript
复制
public static void Configure(HttpConfiguration config)
{
    var authNConfig = new AuthenticationConfiguration();
    config.MessageHandlers.Add(new MyTokenValidationHandler());
}
票数 0
EN

Stack Overflow用户

发布于 2014-07-04 00:52:18

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

我问了一个非常类似的问题,并亲自回答了here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24177045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档