一、OpenAuth開發
OpenAuth是基於OAuth2.0協議實現的開放授權框架, 是大多數開發者集成第三方登錄、發起授權等OAuth2.0相關操作的首選框架之一。
在OpenAuth的開發中,一般需要先完成如下步驟:
1、安裝OpenAuth.Core Nuget包
Install-Package OpenAuth.Core -Version 5.3.0
2、在Web.config中配置資料庫連接字元串
3、創建資料庫,運行OpenAuth.Core的SQL腳本
4、在Global.asax中註冊OpenAuth.Core
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { // 註冊OpenAuth.Core OpenAuthConfig.RegisterOpenAuth(); } }
5、間接在RegisterOpenAuth方法中,綁定登錄類型以及第三方應用信息
6、使用授權信息發起授權請求,在授權回調中獲取授權碼,用授權碼換取AccessToken
public ActionResult Callback() { string code = Request["code"];//獲取授權碼 //使用授權碼grant_code獲取登陸用戶的access_token 此access_token與QQ的access_token一樣有授權時間,超時需要要求用戶重新授權 var tokenResult = OpenAuthAccessToken.GetAccessTokenByCode(code, login_type); var userInfo = OpenAuthUserInfo.GetByAccessToken(tokenResult.access_token, login_type);//獲取用戶信息 //將獲取到的用戶信息保存到資料庫或在session中緩存一段時間 ... }
二、OpenAuth嵌套流程
OpenAuth的嵌套流程就是將OpenAuth集成在自己的Web應用程序中,通過OAuth2.0版本的標準流程來授權第三方應用訪問用戶數據和資源。
OpenAuth的嵌套流程一般包括以下步驟:
1、向第三方應用申請secret id和key secret等信息,第三方應用將調用授權介面,易錯點是防止將應用的數據放錯或漏傳。
private void BindUseAuth() { OpenAuthConfig.ReGetThirdPartyConfigWhenOAuthFailed = true;//如果授權失敗,重新獲取第三方配置信息 var useAuth = new useAuth(); useAuth.AuthorizeSucceed += useAuth_AuthorizeSucceed; useAuth.OpenLogin(openAuthType.QQ); if (OAuthClient.Instance.GetCurrentOAuthUserInfo(openAuthType.QQ) != null) { useAuth_AuthorizeSucceed(null, null); } }
2、獲取access_token。
string accessTokenUrlTemplate = "https://graph.qq.com/oauth2.0/token?client_id={0}&client_secret={1}&code={2}&grant_type=authorization_code&redirect_uri={3}"; var accessTokenApiResult = HttpHelper.HttpGet(string.Format(accessTokenUrlTemplate, QQ_LoginConfig.AppId, QQ_LoginConfig.AppSecret, code, QQ_LoginConfig.CallbackUrl)); var accessToken = OAuthUtility.GetQueryParameter(accessTokenApiResult.Response, "access_token");
3、利用access_token請求用戶數據。
string userInfoUrlTemplate = "https://graph.qq.com/user/get_user_info?oauth_consumer_key={0}&access_token={1}&openid={2}"; var userInfoApiResult = HttpHelper.HttpGet(string.Format(userInfoUrlTemplate, QQ_LoginConfig.AppId, accessToken, openId)); var userInfo = JsonConvert.DeserializeObject(userInfoApiResult.Response);
三、OpenAuth.net
OpenAuth.net是開源的身份認證框架,是一套基於ASP.NET的開源OAuth組件,是基於OpenAuth.Core組件的一套完整的用戶登錄和授權機制的解決方案。
OpenAuth.net方便集成基於OAuth協議的第三方認證登錄,支持QQ、微博、微信等登錄方式,同時支持自定義OAuth客戶端。
四、OpenAuth Token
OpenAuth Token是OpenAuth.Core組成部分之一,是基於OAuth協議的access_token的實現,主要負責access_token的創建、驗證和刪除等。
在使用access_token時,我們通過傳遞access_token參數來訪問介面。
var parameter = new List<KeyValuePair>(); parameter.Add(new KeyValuePair("access_token", accessToken)); ... var result = HttpHelper.HttpGet(...);
五、OpenAuth.Core
OpenAuth.Core組件是OpenAuth框架中最核心的部分,負責OpenAuth框架全局配置、授權有效性驗證等操作。
在OpenAuth.Core中,我們可以進行如下操作:
1、授權有效性驗證
//驗證授權有效性 if (!OAuthValidate.CheckValidate(appId, appSecret, code, state, this, out msg)) { //授權錯誤,拋出異常 throw new Exception(msg); }
2、全局配置
public static void RegisterOpenAuth() { // 配置緩存的類型和列表 CacheConfig.ConfigureCache(); // 配置OpenAuth通用參數 OpenAuthConfig.SSOService = new SSOService(); OpenAuthConfig.AuthDomain = ConfigurationManager.AppSettings["AuthDomain"]; ... }
六、OpenAuth Pro源碼
OpenAuth Pro是OpenAuth框架的旗艦版本,提供更多更好的特性,支持多租戶、提供外部用戶系統導入以及管理、擴展視圖和功能等。
OpenAuth Pro的源碼可以通過Github進行下載,實現庫地址為:https://github.com/szwang/OpenAuth.Net
七、OpenAuth多租戶
在OpenAuth的開發中,我們常常需要將OpenAuth框架集成到多客戶端中。OpenAuth可以依據客戶端申請的應用id和密鑰,實現多租戶授權的效果。
兩個客戶端申請的應用的appId和appScrete是不同的,這樣誰用誰的,同時第三方登陸應用也不是光憑證access_token判斷客戶端,而是通過區分客戶端Id去查找客戶應TOKEN
八、OpenAuth.alipay.com
OpenAuth的實現原理可以參照支付寶的登陸方式,通過open_auth_token授權過程去完成。
使用open_auth_token完成支付寶的登錄,一般包括以下步驟:
1、獲取Authorization Code
https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
2、使用Authorization Code 換取 Access Token
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
3、使用Access Token取用戶信息。
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
以上就是關於OpenAuth的詳解,通過本文,我們可以更加深入地了解OpenAuth的開發、嵌套流程、core組件、多租戶等相關內容。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309355.html