续订访问令牌并保护静态文件

时间:2017-01-30 14:21:32

标签: identityserver3 oidc

我对访问令牌续订/刷新的设置有疑问。我们的设置:

  • 隐含流量
  • 使用API​​承载令牌的Angular SPA
  • 提供包含SPA的cshtml的瘦MVC前端
  • 短访问令牌(10分钟)
  • 20分钟Idsrv cookie滑动(用作活动超时)

该应用程序必须适用于某些严格的安全规则和知识产权。 我们需要在访问令牌到期之前更新它,并且API返回401。 我看过oidc-client-js来处理它。但是这将取消像我们今天那样验证静态文件的选项,因为MVC应用程序不再存在cookie。

有没有办法保护它们,或者只是在使用OpenID Connect构建SPA时我们必须接受的东西?

1 个答案:

答案 0 :(得分:1)

如果您想对静态文件强制执行授权,则需要通过服务器端代码来完成。由于您的客户端使用MVC后端,我的建议是将Hybrid Flow与Katana OpenID Connect中间件结合使用。然后,您可以通过您的视图(cshtml)将您想要使用的任何令牌从服务器端代码传递到SPA。

NuGet上提供了所需的中间件:

install-package Microsoft.Owin.Security.Cookies
install-package Microsoft.Owin.Security.OpenIdConnect

以下代码段允许在您的OWIN管道中进行配置(从this tutorial获取并略有改动):

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies"
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    Authority = "https://localhost:44319/identity",
    ClientId = "mvc",
    RedirectUri = "https://localhost:44319/",
    ResponseType = "code id_token",
    Scope = "openid offline_access",
    SignInAsAuthenticationType = "Cookies"
});

使用此流程,您不再立即获得令牌,但需要交换返回的身份验证码("代码"授权类型),对于一对令牌:

  • access_token(您在隐式流程中已经收到的那个)
  • refresh_token(可以在令牌端点使用,以更新access_token)

有关上述配置的主要注意事项是响应类型和范围。

  1. 响应类型不再仅仅是要求令牌(隐式),而是现在要求代码。
  2. 范围包括" offline_access"将返回refresh_token的范围。
  3. 像这样,我们已经解决了您的访问令牌到期问题,并已开始通过将授权移至后端来解决您的静态资产问题。为了帮助您完成下一部分,我需要知道您如何为资产提供服务,因为根据您使用的是OWIN还是IIS,有不同的方式。