如何在.net核心

时间:2018-05-04 20:50:40

标签: c# asp.net-core .net-core

好的,所以这个请求有点令人费解。提前道歉。

首先,这就是我需要的:

  1. Google登录(使用:.AddGoogle()这是有效的)
  2. 登录后,最初将用户推送到另一个必须输入PIN的页面。
  3. 在后端验证针对数据库的PIN。如果与返回用户不匹配则再次输入PIN。
  4. 验证PIN后,即可完全访问该网站(不包括输入PIN页面)。
  5. 在X分钟不活动(或浏览器关闭)后立即将用户注销。
  6. 接下来,我认为我需要这样做:

    1. 使用services.AddAuthentication(...).AddCookie(...).AddGoogle()

      所以我知道cookie会将过期时间嵌入到它的内容中,但我需要一些方法让它在会话到期时过期,并跟踪PIN是否已经过验证因此:

    2. 创建我自己的中间件,创建一个会话cookie(如果不存在),其中包含随机字符串或数字。

    3. 使用以下行为修改AddAuthentication中发生的任何事情:

      让ASP.NET写出它的auth cookie,并将会话cookie的随机值加密到其中。

      如果Cookie的嵌入过期时间未通过,则仅接受ASP.NET身份验证Cookie,并且auth cookie的嵌入式会话随机字符串与会话Cookie匹配。

      如果cookie中没有记录PIN,请将ASP.NET身份验证重定向到PIN页面,然后在接受PIN并将其记录回身份验证cookie后将请求转发到相应的页面。

    4. 我的问题是我是否正确需要编写自己的中间件?我是否需要将AddAuthentication完全替换为我自己的中间件,还是可以通过制作自己的中间件来补充AddAuthentication正在做的事情来获得我需要的东西?

      在尝试我遇到问题的其中一件事情是,如果我在验证之前在中间件中注销用户(当我检测到会话cookie丢失时),我就无法向身份验证机制发出信号重定向回谷歌登录,用户只是收到错误并且必须刷新。

      此外,如果我走在正确的轨道上:我如何创建一个中间件,在创建之前将一个值注入到授权票证中;验证该值;并删除身份验证票证和/或向auth中间件发出信号,表明它不应处理存储在上下文请求中的cookie,而是应该重定向到google登录?

      编辑:所以我试着自己做一些阅读。我正在关注OAuthHandlers并声称,也许有一些方法可以利用它?我还在调查,但欢迎任何方向。

1 个答案:

答案 0 :(得分:0)

通常说:您不应该编写自己的身份验证。

既然你没有提到身份,我会假设你没有使用它。我建议使用.Net的Identity,因为它可以轻松解决您遇到的问题。从Identity 2.0开始,外部登录(Facebook,Twitter,Google)和2FA功能作为此库的一部分包含在内。这是.Net的事实验证系统,添加它并不太难。

Identity的实际实现超出了问题的范围,因此这里有一个帮助您入门的链接:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&tabs=visual-studio%2Caspnetcore2x