使用Laravel和jwt-auth编写API

JSON Web Token(JWT)是一个轻量级的认证规范,它允许用户和服务器之间传递安全可靠的信息。

在传统的WEB应用中,服务端成功的返回一个响应于两件事。其一是通过一种存储机制保存会话信息(SESSION)。每一个会话都有它独特的信息,常常是一个长的,随机化的字符串,它被用来让未来的请求检索信息。其次,包含在响应头里面的信息使客户端保存了一个COOKIE。服务器自动的在每个子请求里面加上了会话ID,这使得服务器可以通过检索SESSION中的信息来辨别用户。
API应该被设计成无状态的。这意味着没有登录,注销的方法,也没有SESSION和COOKIE。因此,我们引入JWT。

使用jwt进行认证和授权

认证

客户端向服务器发送用于登录的用户名和密码,服务器将用户名和密码和数据库比对成功后,将一条形如 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ的token返回给客户端,客户端应在本地存储这个token。
这条token被 .分为三个部分:头部(Header),载荷(Payload)和签名(Signature)。其中头部的 algtyp两个字段定义了此token所使用的加密算法和token类型;载荷中包含有认证用户的信息;签名则将头部和载荷以及key用base64编码后计算SHA256。

授权

在同一个会话中,当客户端再次向服务器发送请求时,将token附带在请求头的 Authorization字段中。服务器验证此token(是否有效,是否在有效期内等)后,即可对客户端授权。

dingo api是一个为Laravel和Lumen设计的用于更好地实现RESTful API的第三方库,并且兼容jwt-auth。下面我们使用dingo api和jwt-auth来编写一个登录/登录和认证的API。

安装

我们需要安装jwt-auth和dingo api
composer.json中加入如下两行

执行安装

配置

首先配置jwt-auth
编辑 config/app.php
providers中加入
'Tymon\JWTAuth\Providers\JWTAuthServiceProvider'

aliases中加入
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth'

发布配置
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

生成key
php artisan jwt:generate

接下来配置dingo api
providers中加入
Dingo\Api\Provider\LaravelServiceProvider::class

发布配置
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

创建路由

routes/api.php

注册/登录

app/Api/Controllers/AuthController.php

鉴权

在成功登录后,客户端会收到服务器返回的token。在token有效期内(默认是一个小时),客户端在请求需要鉴权的路由时,只需在HTTP请求头中加入名为 Authorization,值为 bearer +token的字段即可,如果token过期则需要重新登录。
在服务器上, api.auth中间件会自动进行token的鉴定。在Controller中,调用 Auth::User()即可获得已认证的用户实例。
app/Api/Controllers/TestController.php

参考资料

http://www.haomou.net/2014/08/07/2014_session/
https://github.com/dingo/api/wiki
https://github.com/tymondesigns/jwt-auth/wiki

macOS Sierra下安装配置nginx, php7与mysql

首先我们需要安装macOS上的包管理器HomeBrew。
访问brew.sh,执行首页上的那行命令即可。
完成后可以把brew源换成国内的镜像源,参考LUG@USTC
完成后 brew update

php7

HomeBrew的默认源里不包含php,需要先tap

PHP获取微信小程序的带参数二维码

最近公司的一款产品需要用到微信小程序的带参数的二维码。虽然微信提供了现成的API,但是整个过程中有非常多的坑。
微信的官方文档:获取二维码 · 小程序

获取Access Token

获取二维码的接口需要用到应用的Access Token。只需要向微信的提供的接口发送 AppIDAppSecret即可获得Access Token。每个Access Token的有效期为7200秒,我们的方案是获取到Access Token之后将其写入Redis并设置7200秒的过期时间。

Laravel 学习笔记

安装

Laravel 可执行文件位于 $HOME/.composer/vendor/bin
使用 laravel new创建新项目

配置

目录权限

Directories within the storage and the bootstrap/cache directories should be writable by your web server or Laravel will not run.

Application Key

.env配置文件中设置 Application Key,它应该有32 个字符长。
使用

生成一个key。

美化链接

Laravel自带 .htaccess文件,需要开启Apache的 mod_rewrite模块
– nginx配置

使用Composer

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

安装

让 composer 可以在全局进行调用

将官方数据源修改为国内镜像

Yii框架学习笔记

从压缩文档安装

Installing Yii from an archive file involves three steps:

  • Download the archive file from yiiframework.com.
  • Unpack the downloaded file to a Web-accessible folder.
  • Modify the config/web.php file by entering a secret key for the cookieValidationKey configuration item (this is done automatically if you are installing Yii using Composer):

  • 使用浏览器访问 /basic/web/index.php,如果有报错则根据报错信息解决错误。
  • 执行 php yii server运行yii的内置Web Server,默认运行在 http://localhost:8080/

You should see the above “Congratulations!” page in your browser.
依赖:

nginx + php-fpm部署php应用

前段时间发现站点的访问变得很不稳定,最开始以为只是网速的问题就没有太在意,直到有一次莫名其妙宕机,ssh上去重启服务,顺便top了一下结果吓了一跳–空闲的物理内存只有几百k了。再往下看发现了一大串apache进程,而且每个进程的内存占用都不小。听说nginx的效率要比apache高,于是决定换上nginx试试。
注意:本文只介绍从LAMP迁移至LNMP的步骤,其中需要改动的只有nginx 和php5,关于MySQL的配置请自行Google,本文不再赘述。

使用树莓派搭建钓鱼WiFi热点

前段时间有一则新闻说使用一台普通电脑搭建的wifi热点就可以窃取使用者的网银和支付宝等密码。但是稍微有点常识的人都会知道:支付相关的网站和部分网站的登陆页面都使用了https连接,所以破解这种加密就不要指望了。不过我们可以换一下思路,比如伪造一个联通WLAN的登陆页面,然后窃取使用者的WLAN号码和密码。

环境配置

需要用到的硬件:

  • 树莓派一台
  • USB无线网卡一个

需要用到的软件

  • apache2
  • php5
  • hostapd
  • dnsmasq