使用外部访问令牌或本地访问令牌

use*_*567 8 asp.net-mvc oauth asp.net-web-api owin asp.net-identity

我正在开发一个应用程序ASP.NET MVC 5.2.2, Web API 2.2 and Katana/OWIN 3.0.该应用程序将ASP.NET Identity 2.1用于本地帐户和数据库.

我正在使用OAuth授权服务器来生成访问和刷新令牌.我有使用我的本地oauth授权服务器的Android和IOS应用程序.Android和IOS应用程序使用SDK登录Facebook,Google等.之后,应用程序将(Facebook/Google/etc)访问令牌发送到服务器.服务器将使用Facebook/Google /等验证访问令牌.

如果它是有效的,那么,

1)我是否应该为应用程序生成新的本地访问令牌(在Auth标头中)以用于将来的所有请求?

2)应用程序每次都应该向我发送Facebook/Gmail/etc访问令牌(在Auth标头中),服务器每次都使用Facebook/Gmail /等验证访问令牌吗?

3)如果本地访问令牌过期,则服务器使用刷新令牌生成新的访问令牌.在此期间服务器是否应更新访问令牌以及刷新令牌或更新访问令牌是否足够?

Tai*_*deh 16

验证社交提供程序外部访问令牌后,您需要将此外部访问令牌与授权服务器(本地机构)颁发的本地访问令牌交换.有关此实施的所有详细信息,请访问:http://bitoftech.net/2014/08/11/asp-net-web-api-2-external-logins-social-logins-facebook-google-angularjs-app / 如果有帮助,请告诉我.

以下是我通过Local Authority更改外部访问令牌以及访问令牌问题所遵循的确切步骤.前端是AngularJS应用程序.你可以在这里查看演示应用程序,看看我是如何使用Facebook访问令牌http://ngauthenticationweb.azurewebsites.net/访问web api的.

1- AngularJS应用程序通过指定client_id,redirect_uri,response_type将HTTP GET请求发送到我们的后端API中定义的匿名端点(/ ExternalLogin).

2-一旦结束点收到GET请求,它将检查用户是否经过身份验证,并让我们假设他未经过身份验证,因此它将通知负责请求的外部提供商的中间件负责此呼叫,我们的情况是谷歌.

3-将显示Google的同意屏幕,用户将提供其Google凭据进行身份验证.

4-谷歌将回调我们的后端API,谷歌将设置一个外部cookie,其中包含来自Google的身份验证结果(包含来自外部提供商的所有用户声明).

5- Google中间件将列出名为"Authenticated"的活动,我们将有机会阅读Google设置的所有外部声明.在我们的案例中,我们有兴趣阅读名为"AccessToken"的声明,该声明代表Google Access令牌,此声明的发行人不是本地授权,因此我们无法直接使用此访问令牌来授权我们的安全呼叫后端API端点.

6-然后我们将外部提供商外部访问令牌设置为名为"ExternalAccessToken"的自定义声明,Google中间件将重定向回端点(/ ExternalLogin).

7-现在使用外部cookie对用户进行身份验证,因此我们需要检查初始请求中设置的client_id和redirect_uri是否有效,并且此客户端配置为重定向指定的URI.

8-现在代码检查外部user_id和提供者是否已经注册为本地数据库帐户(没有密码),在这两种情况下,代码将发出302重定向到redirect_uri参数中的指定URI,此URI将包含以下("外部访问令牌","具有本地帐户","提供商","外部用户名")作为URL哈希片段而不是查询字符串.

9-一旦AngularJS应用程序收到响应,它将根据它决定用户是否具有本地数据库帐户,基于此,它将向其中一个端点(/ RegisterExternal或/ ObtainLocalAccessToken)发出请求.两个端点都接受外部访问令牌,该令牌将用于验证,然后使用它来获取LOCAL AUTHORITY颁发的本地访问令牌.此本地访问令牌可用于访问我们的后端API安全端点.