一、OpenAuth开发
OpenAuth是基于OAuth2.0协议实现的开放授权框架,是大多数开发者集成第三方登录、发起授权等OAuth2.0相关操作的首选框架之一。 在OpenAuth的开发中,一般需要先完成如下步骤:
- 安装OpenAuth.Core Nuget包
Install-Package OpenAuth.Core -Version 5.3.0
- 在Web.config中配置数据库连接字符串
<connectionStrings> <add name="OpenAuthConnection" connectionString="{连接字符串}" providerName="System.Data.SqlClient" /> </connectionStrings>
- 创建数据库,运行OpenAuth.Core的SQL脚本
- 在Global.asax中注册OpenAuth.Core
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { // 注册OpenAuth.Core OpenAuthConfig.RegisterOpenAuth(); } }
- 间接在RegisterOpenAuth方法中,绑定登录类型以及第三方应用信息
- 使用授权信息发起授权请求,在授权回调中获取授权码,用授权码换取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的嵌套流程一般包括以下步骤:
- 向第三方应用申请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); } }
- 获取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");
- 利用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<qq_userinfo>(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<string, string>>();
parameter.Add(new KeyValuePair<string, string>("access_token", accessToken));
...
var result = HttpHelper.HttpGet(...);
五、OpenAuth.Core
OpenAuth.Core组件是OpenAuth框架中最核心的部分,负责OpenAuth框架全局配置、授权有效性验证等操作。 在OpenAuth.Core中,我们可以进行如下操作:
- 授权有效性验证
// 验证授权有效性 if (!OAuthValidate.CheckValidate(appId, appSecret, code, state, this, out msg)) { // 授权错误,抛出异常 throw new Exception(msg); }
- 全局配置
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完成支付宝的登录,一般包括以下步骤:
- 获取Authorization Code
https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
- 使用Authorization Code 换取 Access Token
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
- 使用Access Token取用户信息。
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_REDIRECT_URI&state=STATE
以上就是关于OpenAuth的详解,通过本文,我们可以更加深入地了解OpenAuth的开发、嵌套流程、core组件、多租户等相关内容。