如何进行应用程序到应用程序(服务器到服务器)身份验证、OAuth 2.0、Web API 2.0

Posted

技术标签:

【中文标题】如何进行应用程序到应用程序(服务器到服务器)身份验证、OAuth 2.0、Web API 2.0【英文标题】:How to do Application to application (server to server) authentication, OAuth 2.0, Web API 2.0 【发布时间】:2015-09-28 02:26:29 【问题描述】:

我的项目有 2 个独立的 ASP.NET MVC 5 应用程序。一个使用另一个作为服务。基本上,其中一个应用程序是 Profile Service,它拥有用户的所有个人资料信息,以便将来其他应用程序可以使用该服务,而用户不必设置多个帐户。这些应用程序是组织内部的。对于身份验证和授权,我们使用 Windows 身份验证和智能卡。 Profile Service 应用程序使用 Web API 2.0。我还没有设置 OAuth 2.0。

问题:就目前而言,任何知道如何向配置文件服务发送请求的人都可以这样做(例如输入带有查询字符串的 url)。

我想要实现的目标:我想授权我的另一个应用程序(目前,只有那个......将来,更多)。我不希望请求基于使用应用程序的用户的授权,而是基于应用程序本身。换句话说,如果对配置文件服务的请求来自该应用程序,无论谁登录和使用它,配置文件服务都会将其视为授权请求......如果它来自其他任何地方,则会被拒绝。

我已经做了一些研究。我找不到任何明确说明如何设置的内容。我找到了有关如何使您的应用程序专门为 Google 服务或 Twitter 服务授权的资料……告诉我如何设置客户端应用程序,而不是服务器应用程序(但即使是客户端设置,我也不确定是否正确满足我的特定需求,因为它是一个内部应用程序,因为我不知道 Google 服务是如何工作的,等等)。似乎 OAuth 2.0 和令牌是要走的路,但我该如何实现呢?我需要非常具体的、逐步的答案(希望有一些代码)。

提前非常感谢您。我会经常回来检查。如果您需要更多信息,请告诉我。

编辑: 哦!我忘了提!我们使用的是 HTTPS,而不是 HTTP……这有什么关系吗?

【问题讨论】:

【参考方案1】:

OAuth 有不同的授权类型,您需要的一种是“客户端凭据”来授权应用程序本身。这与您在 google/facebook 上看到的不同,因为没有重定向/浏览器交互。

POST https://oauthEndpointurl/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

客户端 ID 和客户端密码被发送到服务器,然后返回令牌,可能还有刷新令牌,具体取决于您的实现。

那么您需要做的就是将令牌发送回请求的标头中。 (如果您使用的是库,那么它已经被处理了。)

"Authorization: Bearer xxxxTOKENxxxxx"

查看这篇关于 DO 的文章了解更多详情:

https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2

【讨论】:

非常感谢。如果我有其他问题,我会让你知道这是怎么回事。我试图在您的答案中添加一点,但我还没有足够的代表来显示它。另外,如果有人有什么想补充的,我会很高兴阅读更多……哦!我忘了提!我们使用的是 HTTPS,而不是 HTTP……这有什么关系吗? 不,无论如何,https 都可以。由于您没有提到特定的 Oauth 库,因此我不能说得太具体,但这是它的基础知识。如果有什么更具体的让我知道,这是一个通用的答案,但是一旦你了解它是如何工作的,它也很简单,那么你可以选择适合你的场景。您还可以将 json Web 令牌与 Oauth 一起使用。 你认为 OAuth2 绝对是解决这个问题的方法吗?我已经和我团队的高级开发人员谈过了,他说,由于这些是内部应用程序并且没有太大的风险,我们可以使用个人帐户(例如使用常规用户名和密码)和硬代码进入客户端应用程序。你怎么看?如果我们要这样做,你会建议什么框架,我们应该如何去做?非常感谢。很抱歉又给您添麻烦了。 Oauth 相对于简单身份验证的唯一真正好处是它允许您连接可撤销的令牌,主要好处是当您有外部客户端或您在面向公众的网络上时无法使用令牌(即使通过安全连接也可以从浏览器窥探)。前端的客户端凭据很简单;这是在后端设置它们的工作,这使得在这个简单的情况下过度杀伤。 非常感谢杰夫。是的,我开始认为 OAuth 可能不是这里的方法,所以我很高兴你为我确认了它。关于如何前进的任何建议?我是一个身份验证和授权的白痴,但我必须弄清楚,因为我是这个 sprint 分配给这个项目的唯一开发人员。非常感谢您花时间帮助我。

以上是关于如何进行应用程序到应用程序(服务器到服务器)身份验证、OAuth 2.0、Web API 2.0的主要内容,如果未能解决你的问题,请参考以下文章

爆料!如何在Visual Studio 2017上体验五星级云服务

如何使用 Facebook 登录 API 对 XMPP 用户进行身份验证?

Azure 应用服务:自定义身份验证和社交提供程序

Quarkus:如何在微服务之间进行身份验证?

我用的是window server 2003系统, 管理工具 计算机管理中:无本地用户和组,如何调出?另用window 身份验...

如何在组件之间共享来自 http 响应的数据?