如何将OAuth2身份验证令牌从MVC5 wepapplication传递到WebAPI2应用程序

时间:2013-11-20 09:26:35

标签: .net oauth-2.0 cors asp.net-mvc-5 asp.net-web-api2

我在使用OAuth2,WebAPI2和界面设置项目时遇到了一些麻烦。

情景:

我正在建立一个基本上是WebApi2的项目。此WebApi为我的接口提供业务逻辑和数据。

目前,界面是一个MVC5 web应用程序,但将来我希望能够将其他一些“应用程序”连接到它。这就是CORS的用武之地:接口和WebAPI可以位于不同的服务器上。

我想使用OAuth2,因此用户可以通过Google和其他提供商进行注册。

问题:

它涉及注册部分:

首先,我尝试注册接口MVC应用程序并尝试将身份验证令牌传递给WebAPI。这似乎不是实现这一目标的正确方法。

现在我想在WebApi项目中公开一个注册界面,这样如果他们在MVC web应用程序中注册,用户将被重定向到Api。但是这会让人担心,因为对于MVC web应用程序的每个操作,都需要“这个用户通过身份验证”的调用。

有谁知道这两个选项中的哪一个(或者可能是第三个)更合适?

我知道这很广泛,但请保持温和; - )

2 个答案:

答案 0 :(得分:2)

这是建筑部分的一个相当大的问题。

要温柔。第二种方法似乎很复杂,因为你有两个UI接口考虑所有应用程序(MVC5应用程序和现在用于注册的WebAPI)

因此,您将使您的界面更依赖于API项目,使其紧密耦合。

在第一种方法中,如果只有安全性是您的障碍,那么您可以在服务调用Web API项目之前和之后加密/解密令牌。

使用第一种方法,您可以在本地存储或会话中的接口/表示层上保留用户身份验证

WebApi本身适用于应用程序与系统的其他组件(如业务层)之间的分布式通信。

但是你已经有了接口层,所以我认为没有必要通过用户界面使WebApi变得沉重。

第一种方法会很好。

答案 1 :(得分:1)

我们的项目具有相同的架构。

MVC网站 - > Web API(业务) - > Web API(数据)

Business API将向第三方开发人员开放,因此我们需要OAuth2身份验证。

Web API只能打开一些功能,而不是全部,也许您会使用“范围”,但对我们来说,只有两种API,第三方API和我们网站的API。

所以我们在authenticate处理程序中做了一些事情,有一个授权标题的“Bearer”方案,为什么不为我们的网站新建一个?

然后它有效。只需为MVC站点定义一个新方案,例如。 “ASPX”,并从网站存储表单cookie,解决它。

我们还可以知道自标头方案以来请求的位置不同。

顺便说一句,你应该注意计划的名称。