ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-Asp.Net Core 2.2-了解身份验证中间件和外部登录

2019-12-11 05:05:28  阅读:188  来源: 互联网

标签:authentication asp-net-core-2-2 c


我一直在尝试围绕这个概念下意识,但是有很多问题,不幸的是,所有正式文档和教程都是基于带有单独用户帐户的Visual Studio模板.

我相信我的目标非常简单.我有一个Web应用程序,它将仅支持外部提供程序登录(即:Facebook,Twitter和LinkedIn).我不想支持cookie身份验证,因为将不支持自定义用户名/密码.

我的第一个问题是定义默认的AuthenticationScheme.以下是我的startup.cs:

services.AddAuthentication()
        .AddFacebook(/* options */)
        .AddTwitter(/* options */)

如果我使用Authorize属性定义一个控制器动作,那么当我点击该路由时,不会得到默认身份验证方案定义的错误.但是,如果用户未经授权,我希望将他们重定向到我的登录路由.如果我像下面那样修改startup.cs,那么所有方法都可以,但是我认为我支持我不希望的cookie(旧形式身份验证?)身份验证.

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie()
        .AddFacebook(/* options */)

我的另一个问题是我不知道在AddFacebook()调用下会发生什么.如果我以此方式设置中间件并使用Facebook登录,我会神奇地获得所有必要的令牌,声明,然后突然我设置了应用程序cookie,而我的fb_login回调路由可以访问Facebook的令牌!当我检查网络请求时,我发现signin-facebook路由被击中-这是我未定义的-而且我猜它在幕后调用HttpContext.SignInAsync()等…但是如果我刷新我的fb-登录回调并检查是否

HttpContext.AuthenticateAsync(FacebookDefaults.AuthenticationScheme) 

返回Success = true否!它返回false!但这是一秒钟前的事实吗?

另外,什么时候应该使用AuthenticateAsync()和SignInAsync()之类的方法?

长话短说,我需要一个无需asp.net Identity Framework,EntityFramework和模板即可解释该中间件的教程或文档.

我想了解一个简单的AddFacebook()调用如何绑定所有内容,并且如果我想手动执行此操作(例如使用AddOauth),我如何实现相同的功能?

我不喜欢“自动工作”的代码,因此如果有人可以解释这里发生的事情,我将不胜感激.

解决方法:

Cookie身份验证用于在请求之间保留身份验证状态.没有替代品,没有,它与表单身份验证不同,尽管在两种情况下都使用cookie.这样做的原因仅仅是因为cookie是使状态通过HTTP协议工作的原因,HTTP协议本身是无状态的.如果排除使用cookie,则没有其他机制可以保持状态.

使用类似Facebook auth方案的东西直接授权初始请求,但是同样,由于没有状态,下一个请求将不再被认证,而无需再次通过Facebook OAuth流程.

总而言之,其他身份验证方案可用于API之类的东西,其中通常通过诸如Authorization标头之类的东西分别对每个请求进行身份验证. Web浏览器无法以这种方式工作,而是依靠Cookie来处理后续授权.没有Cookie,没有授权.

标签:authentication,asp-net-core-2-2,c
来源: https://codeday.me/bug/20191211/2106726.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有