`

一步一步搭建 OAuth 认证服务器

 
阅读更多

群里的损友们又开始叫了,说在等待我的关于 OAuth 服务器搭建 Demo 的介绍文章。这段时间一直很忙,人一忙,偶尔的一点闲暇就想睡觉,啥也不想做,学习上确实有些懈怠。此处悔过5分钟…….

我之前写过一篇《一步一步搭建 OAuth 认证服务器》的文章,其实也就是介绍了一下 OAuth 的理解和 oauth-php 这个开源的项目,并没有做出一个演示。今天这篇文章就来做一个Demo,我们基于 PHP 来搭建一个 OAuth认证服务器。开始吧!

为了方便理解,可以先看一下在 OAuth 认证过程中的几个关键术语,这也是 RFC5849 中 “1.1.  Terminology” 小节的内容。也可以查看其中文版本

想了一下,没有想到好的应用场景,干脆就使用 RFC5849 中的例子吧。这个例子大概的意思是:

首先,我们再虚拟机上面搭建三个虚拟主机。我这里搭建的三个主机是:

配合上面介绍的应用场景,www.service.com 相当于网站A,而 www.demo.com 则相当于网站B.

接下来,我们为网站 A 虚拟一个用户 Jane,并将其用户名和密码以及她的照片保存在 MySQL 数据库中。

先创建一个数据库,名曰:photo, 在其中新建一个表user:

用户有了,现在给用户创建一个表,用来存储用户照片。新建一个表“image”:

数据表有了,现在填充一些数据:

由于 auth.service.com 认证服务器需要提供应用程序认证服务,所以需要创建一个表存储应用程序信息。实际上,还需要一些其他的相关的数据表。

我们这里使用的是 MySQL 数据库,打开浏览器,访问 http://auth.service.com/oauth-php/library/store/mysql/install.php 来进行数据表的安装。事先需要编辑 install.php 进行数据库配置。安装完毕,请将该文件的数据库连接部分重新注释掉。

下面来实现OAUTH服务器端的应用注册功能。

首先在 oauth.service.com 服务器下新建一个 config.inc.php 文件,文件内容如下:

该文件的主要作用是保存数据库连接信息。然后继续新建一个 “oauth_register.php” 文件,文件内容如下:

这时候,通过浏览器访问:http://auth.service.com 就可以自动注册一个应用(其实就是一个消费方Client)。并且将该应用的 App Key 和 App Secret呈现给你。下面 www.demo.com 站点将使用这2个字符串进行认证。所以现在先把这两个值保存起来备用。

看到的页面应该类似于:

这样,消费方注册功能就完成了。

接下来,消费方 www.demo.com 就可以使用这个 App Key 和 App Secret,向认证服务器请求未授权的 Request token 了。这一步需要做两件事情:① 消费方 www.demo.com 向 OAuth Server 也就是 auth.service.com 请求未授权的 Request token;② OAuth Server 处理消费方的请求,生成并将未授权的 Request token 返回给消费方;

先来实现第②件任务。

在认证服务器 auth.service.com 的根目录下新建一个文件”request_token.php”, 文件内容是:

现在认证服务器已经可以响应消费方请求“未授权的token”了。

这里要特别注意一点,如果测试的时候,消费方和服务提供方在同一台服务器,就像我现在的情况,三个服务器都在同一个虚拟机里,那么要注意,客户端请求的时候,可能发生找不到主机的问题。为啥?因为服务器找不到虚拟的 auth.service.com 认证服务器。怎么解决呢?

Windows下面,我们可以设置 hosts 主机表文件,使某一域名的指向某一固定IP地址。Linux下面也有类似的主机表文件,它的位置是 /etc/hosts,接下来如何做,这里就不用讲啦。

现在来实现第①件任务。

首先在消费方数据库服务器将认证服务器添加到消费方的 OAuthStore 中。这里的数据库安装方式与服务方相同,不再赘述。

然后,我们再消费方服务器 www.demo.com 的根目录添加一个 “config.inc.php” 文件,保存消费方自己的数据库连接信息。我这里由于使用的是虚拟主机,恰好消费方和认证服务器的数据库连接参数是一样的。实际情况可能不是这样。文件的内容与上面的类似:

然后,在消费方服务器根目录继续添加一个文件,add_server.php, 用来向消费方的数据库中存储认证服务器的信息。其实一般的,这个信息可能会直接写在配置文件里,不过,oauth-php提供了更加强大的数据库的存储方案而已。该文件的内容是:

这样,通过浏览器访问一下该文件,http://www.demo.com/add_server.php, 服务器的相关信息就会被保存起来了。用于生产环节时,这里可能是一个简单的管理系统,可以用来管理认证服务器列表。注意,上面文件里的 key 和 secret 正是我们之前在认证服务器 http://auth.service.com 注册消费方应用时得到的。

有了认证服务器的相关信息,我们现在可以去获取“未认证的token”了。在 www.demo.com 根目录新建一个文件 index.php:

现在,通过浏览器访问 www.demo.com/index.php页面,然后点击页面上的“Click Me”按钮,开始向auth.service.com服务器请求“未授权的token”。如果最后结果显示类似于:

那么恭喜你,获取“未授权的token”这一步,已经顺利完成了。

接下来,根据 OAuth 验证的流程,应该是重定向用户浏览器到 auth.service.com 进行 token 授权。

在 auth.demo.com 服务器根目录新建一个文件 authorize.php, 代码如下:

如果用户未登录,则要求先行登陆才能进行授权操作。

http://www.fising.cn/2011/06/%E5%9F%BA%E4%BA%8Ephp%E7%9A%84oauth%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%90%AD%E5%BB%BA.shtml

分享到:
评论

相关推荐

    spring-oauth-server

    本文将详细介绍如何使用Spring和OAuth2搭建一个认证服务器。 ### 一、项目概述 `spring-oauth-server` 是一个基于Spring框架和OAuth2构建的认证服务示例。它包含了完整的源代码和SQL脚本,方便开发者快速上手并...

    springboot 微信端登录demo.rar

    Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它预设了各种默认配置,减少了大量的XML配置,使得开发人员可以快速构建基于Spring的应用。 微信端登录涉及到的主要技术点...

    springcloud 案例

    3. **自定义权限认证**:这一步通常涉及到Spring Security或OAuth2。你可以创建一个认证服务,处理用户的登录验证,然后使用JWT(JSON Web Tokens)生成令牌,传递给其他微服务进行权限校验。每个微服务在接收到请求...

    android 微博

    - **安全考虑**:了解并实施OAuth2或其他认证机制,确保用户数据的安全。 5. **网络通信**: - **HTTP请求库**:使用像Retrofit或Volley这样的库发送HTTP请求,与服务器进行数据交换。 - **JSON解析**:使用Gson...

    SSO实例安装和配置指南

    SSO系统通常包含两个主要部分:认证服务器(Identity Provider, IDP)和资源服务提供商(Service Provider, SP)。IDP负责用户的认证,而SP则依赖于IDP的认证结果来授权用户访问其服务。 1. **安装SSO实例** - **...

    Liferay门户手册.pdf

    这一过程通常涉及到配置Liferay以使用LDAP服务器进行身份验证,可能需要调整Liferay的配置文件以适应LDAP服务器的特定设置。 ##### 4.4 集成应用安全单点登录 单点登录(Single Sign-On,SSO)允许用户在一个应用中...

    PHP开发QQ第三方登录功能 实战视频课程

    - 主要功能:提供包括登录认证、数据统计分析等在内的多种服务。 - 适用场景:适用于各种类型的网站和移动应用。 2. **注册应用流程**: - 访问QQ开放平台官网进行注册。 - 提交基本信息,如应用名称、Logo、...

    兔子影视网站源码v1.3.6.5微信电影网站基于freekan影视系统二次开发.txt

    此功能涉及到OAuth2.0认证机制的学习与实践,包括但不限于获取授权码、访问令牌等步骤。 2. **二次开发定制化**:在`freekan`基础上进行二次开发意味着开发者可以根据具体需求对原有功能进行修改或扩展。例如增加...

    EStoree源代码

    5. **安全机制**:包括用户认证(如OAuth、JWT)、支付安全(如SSL加密、第三方支付平台集成)和防止SQL注入、XSS攻击的安全措施。 6. **部署配置**:涉及服务器环境搭建、负载均衡、日志管理和持续集成/持续部署(C...

    在线购物系统项目计划书与需求文档

    为了达到这些目标,开发者需要了解SSL/TLS加密、OAuth认证、支付网关集成以及可用性设计原则。 最后,文件名称“软件工程2009”可能暗示这是一个历史项目或教程,展示了早期的软件工程实践。尽管技术日新月异,但...

    CAS restful接口调用

    CAS支持多种认证协议,包括但不限于HTTP Basic、HTTP Form-Based、OAuth等。本文将重点介绍CAS如何通过RESTful接口来实现票据的获取与验证过程。 #### 二、环境搭建 为了使用CAS提供的RESTful接口功能,首先需要在...

    本地会员与新浪微博api绑定和同步登陆(文件 数据库 教程)

    然后,开发者使用这个授权码和App Key/Secret向新浪服务器换取Access Token和Refresh Token。 3. **获取用户信息**:有了Access Token,开发者可以请求用户的基本信息,如用户名、头像等,这些信息可以存储在本地...

    校园生活综合服务平台小程序的设计与实现.docx

    - **后端服务**:搭建稳定高效的服务器,并选择合适的数据存储方案。 #### 4. 安全性考虑 - **数据加密**:对敏感信息进行加密处理。 - **权限管理**:设置合理的用户权限,保护个人信息安全。 ### 知识点三:关键...

    freelec-spring-boot2-webservice

    我们将了解Spring Security的基本配置、OAuth2认证流程,以及JWT(Json Web Token)的使用,从而确保Web服务的安全性。 此外,课程还会涉及Spring Boot 2的微服务架构。我们将探讨如何使用Spring Cloud相关组件,如...

Global site tag (gtag.js) - Google Analytics