OpenAuth详解

一、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/n/309355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2025-01-04 19:30
下一篇 2025-01-04 19:30

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25

发表回复

登录后才能评论