是否可以在ASP.NET 5的Web API中使用外部身份提供程序?
阅读
this question,@ Pinpoint的答案以及对评论的进一步讨论,我很清楚我们原本无法在使用ASP.NET 5开发的应用程序中添加身份提供程序.然后,可以替代传统的OAuthAuthorizationServerMiddleware. AspNet.Security.OpenIdConnect.Server正如我在很多地方发现的那样.
现在,有一点我仍然不确定这一切因为我真的不是安全方面的专家,所以我对OAuth的了解不是很深刻.我怀疑如下:在使用OAuth保护一个RESTful API时是否可以使用外部身份提供程序? 请注意,我不是在谈论将社交登录添加到一个网站,我在谈论在一个RESTful API中使用一个外部身份提供程序. 我的观点是,这让我有点困惑,因为我一直认为这应该是我的应用程序的一个问题. 所以我的问题是:在使用OAuth和ASP.NET 5时,是否可以使用外部身份提供程序,而不是实现一个?如果有可能,这简单如何工作?我的意思是,我的应用程序仍然需要能够管理用户的身份,因为它需要管理声明等等. 在这种情况下,如果真的有可能,流程将如何?外部身份提供商应该发行令牌吗?但我的应用程序如何能够验证这些令牌并管理用户身份? 编辑:我不确定的原因之一是,当我们使用USEOAuthAuthentication扩展方法时,我们设置了一个回调路径,描述为
现在,如果我们正在开发一个网站,那么这确实有意义.该人去那里,点击按钮登录Facebook等提供商.用户被重定向到Facebook的页面,然后在他登录后,他被重定向到该站点的某个页面. 另一方面,使用RESTful API,这是毫无意义的.没有被重定向的概念. 这使得外部提供程序的使用似乎仅适用于站点,而不适用于RESTful API.这是我的问题的要点. 解决方法
是的,这绝对是可能的.这正是您使用Azure Active Directory保护API端点时所执行的操作: app.USEOAuthBearerAuthentication(options => { options.AutomaticAuthenticate = true; options.Authority = "https://login.windows.net/tushartest.onmicrosoft.com"; options.Audience = "https://TusharTest.onmicrosoft.com/TodoListService-ManualJwt"; }); 下一个合理的问题是:如果您可以使用AAD发布的令牌来保护您的API,为什么不能用Facebook或Google令牌做同样的事情? 与Facebook或Google不同,AAD发布名为JWT令牌的完全标准化令牌,OAuth2承载中间件可以“读取”和“验证”以确定令牌是否仍然有效并且是否真的为您的API发放(即,如果受众附带令牌)对应于您的API.您可以在发出授权请求时使用resource参数控制此值. 您无法使用FB或Google令牌执行类似操作,因为它们完全不透明.实际上,这并不奇怪,因为这些令牌只有一个目标:允许您查询FB或Google API,而不是您自己的(这些社交提供商不允许设置访问令牌的受众). 由于您无法自行阅读令牌,唯一的选择是询问FB或Google是否仍然有效以确保您的API不接受无效令牌.这是你可以(轻松)用Facebook做的事情,因为他们提供了一个“令牌检查端点”,你可以查询它:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow(参见Inspecting access tokens章节).这样,您可以确保令牌未过期,并确定与令牌对应的用户. 遗憾的是,这种方法有两个缺点: >您必须对Facebook端点进行额外的HTTP调用以验证访问令牌,这意味着缓存收到的令牌以避免Facebook充斥太多请求. 您可以在本SO答案的最后部分找到更多信息(适用于Katana和Dropbox,但您应该明白这一点):OWIN/OAuth2 3rd party login: Authentication from Client App,Authorization from Web API
要解决前一部分中提到的限制,最好的选择是 – 正如您已经想到的那样 – 创建自己的授权/身份验证服务器.这样,您的API就不会(直接)接受FB或Google令牌,而是由您自己的服务器发布的令牌,这些令牌可能会将您的用户重定向到FB或Google进行身份验证. 这正是这个样本的作用:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/vNext/samples/Mvc >客户端应用程序(Mvc.Client)邀请用户使用您的授权服务器(Mvc.Server)进行身份验证,以便他可以获取访问令牌以便稍后查询API(也在Mvc.Server中).为此,用户将被重定向到您的授权服务器,授权服务器本身可让您通过Google或Twitter进行身份验证.>完成此外部身份验证步骤后,用户将被重定向回授权服务器(Mvc.Server),并要求他同意客户端应用程序(Mvc.Client)访问其个人数据.>当给出同意时,用户将被重定向回客户端应用程序,其中包含可用于查询API端点的访问令牌. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在ASP.NET 4.0应用程序的IIS管理器中添加用户?
- ASP.NET httpRedirect:重定向所有页面,除了一个
- 尝试使用VS和IIS Express在本地设置HTTPS时出现连接重置错误
- ASP.NET WebApi RESTful标准
- 最好的ASP.net WYSIWYG
- asp.net – 有没有工具可以将旧版VML转换为SVG?
- IIS或ASP.NET是否创建了包含请求URL的ETW事件?
- asp.net-mvc-3 – 如何打印未映射的值
- asp.net – 使用Windows凭据和.ne??t 4.5 WIF的RequestSecu
- 预编译的ASP.NET Web应用程序:错误“System.Web.HttpExcep