我有许多不同的web应用程序,都运行在ASP.NET MVC中。这些IIS应用程序是.NET/ ASP.NET混合应用程序,通常调用WebAPI API,这些API在IIS上运行在自己的单独应用程序中。
所有应用程序都在同一个域上,但在单独的子域中。它们都运行在IIS的同一个实例上。
该结构如下所示:
我需要做的是登录一个单一来源的支付和新闻应用程序,即登录应用程序。然后,登录应用程序调用登录API (显然不受限制)以发出令牌。
如果用户试图在没有令牌的情况下访问支付或新闻应用程序,则应该将它们重定向到登录应用程序。如果没有有效的令牌,支付API和NewsAPI也应该是不可访问的,应该同时设置登录。
目前,登录API使用OWIN/OAuth成功地发出了一个承载令牌--我不确定的部分是跨子域使用它。
我该怎么做呢?
发布于 2016-05-20 07:16:41
您可以使用内置于Owin身份验证中间件中的Asp.Net来实现此功能。请参考这个伟大的文章,我相信您会想出适合您需要的解决方案。
在单独的类库中在IAppBuilder上编写一个扩展方法,并在所有应用程序之间共享该方法以进行令牌验证。请参阅下面的示例(从本文复制的代码):
public static void ConfigureOAuth(this IAppBuilder app)
{
var issuer = "http://jwtauthzsrv.azurewebsites.net";
var audience = "099153c2625149bc8ecb3e85e03f0022";
var secret = TextEncodings.Base64Url.Decode("IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw");
// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret)
}
});
}发行人将使用相同的信息(秘密和受众)发行令牌。由于验证逻辑在子域中是相同的,所以令牌在所有子域上都是有效的。
如果你有任何问题请告诉我。
谢谢你,索玛
https://stackoverflow.com/questions/37340010
复制相似问题