簡體   English   中英

使用外部訪問令牌或本地訪問令牌

[英]Use External Access Token or Local Access Token

我正在使用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)如果本地訪問令牌過期,則服務器使用刷新令牌生成新的訪問令牌。 在此期間服務器是否應更新訪問令牌以及刷新令牌或更新訪問令牌是否足夠?

驗證社交提供程序外部訪問令牌后,您需要將此外部訪問令牌與授權服務器(本地機構)頒發的本地訪問令牌交換。 有關此實施的所有詳細信息,請訪問: 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安全端點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM