承接 vatsim/sso 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

vatsim/sso

最新稳定版本:3.0

Composer 安装命令:

composer require vatsim/sso

包简介

VATSIM OAuth

README 文档

README

Laravel 4 compatible, use version 2 for Laravel 5

The VatsimSSO package integrates with the VATSIM.net Single Sign On, which lets your users log themselves in using their VATSIM ID. This is especially useful for official vACCs and ARTCCs.

Version

1.0

Installation

Use Composer to install the VatsimSSO and dependencies.

$ composer require vatsim/sso 1.*

Laravel

Set up

Using VatsimSSO in Laravel is made easy through the use of Service Providers. Add the service provider to your app/config/app.php file:

'providers' => array(
    // ...
    'Vatsim\OAuth\OAuthServiceProvider',
),

Followed by the alias:

'aliases' => array(
    // ...
    'VatsimSSO'       => 'Vatsim\OAuth\Facades\SSO',
),

Configuration file

Use artisan to publish the configuration file. After running the command you will find the file in app/config/packages/vatsim/sso/config.php. Change the settings accordingly.

$ artisan config:publish vatsim/sso

Outside Laravel

Let's first create a configuration file to keep our code clean.

/*
 * DO NOT PUBLISH THE KEY, SECRET AND CERT TO CODE REPOSITORIES
 * FOR SECURITY.
 */

/*
 * The location of the VATSIM OAuth interface
 */
$base = 'https://';

/*
 * The consumer key for your organisation (provided by VATSIM)
 */
$key = 'MY_KEY';

/*
 * The secret key for your organisation (provided by VATSIM)
 * Do not give this to anyone else or display it to your users. It must be kept server-side
 */
$secret = 'my_secret';

/*
 * The signing method you are using to encrypt your request signature.
 * Different options must be enabled on your account at VATSIM.
 * Options: RSA / HMAC
 */
$method = 'HMAC';

/*
 * Your RSA **PRIVATE** key
 * If you are not using RSA, this value can be anything (or not set)
 */
$cert = '';

/*
 * The URL users will be redirected to after they log in, this should
 * be on the same server as the request
 */
$return = 'http://example.com/valiatelogin';

Now, let's initialise the SSO class.

// load the Composer autoload file, which automatically
// loads all the classes required for use by VatsimSSO.
require 'vendor/autoload.php';
require 'config.php';

use Vatsim\OAuth\SSO;

$sso = new SSO($base, $key, $secret, $method, $cert);

Usage

Logging In

The first step would be to send a request to VATSIM to let the user login. The easiest approach would be using the login function. The function takes three parameters.

Parameters

Parameter Type Description
$returnUrl string | array The URL to which the user should be redirected after the login is successful
$success string | Closure Callback function containing the actions needed to be done when you are able to let the user authenticate (ie. when your key/secret are correct). The function will return three variables: $key, $secret and $url.
$error string | Closure Default: null – Callback function containing the actions needed to be done when your credentials (ie. key/secret) are incorrect.

For both $success and $error, you may pass a string in [class]@[method] format to call a function in another Model, otherwise pass an anonymous function.

Return URL

The return URL parameter will also take an array instead of a string. In this array you can add the values suspended and/or inactive to allow members with suspended or inactive accounts to log in. The first element of this array that is a valid URL will be used as the return URL.

Success

The success parameter returns three variables: $key, $secret and $url. The key and secret should be stored in a session for the validation process. The url will be used to redirect the user to the VATSIM SSO site.

Error

Optional parameter. If this parameter is ignored and an error occurs, the function will return false. If you pass a function then one parameter will be returned $error, which is an array of data related to the last error.

Example

// Laravel
return VatsimSSO::login(
    Config::get('vatsimsso:return'),
    function($key, $secret, $url) {
        Session::put('vatsimauth', compact('key', 'secret'));
        return Redirect::to($url);
    },
    function($error) {
        throw new Exception('Could not authenticate: ' . $error['message']);
    }
);

// Outside Laravel
$sso->login(
    $return,
    function($key, $secret, $url) {
        $_SESSION['vatsimauth'] = compact('key', 'secret');
        header('Location: ' . $url);
        die();
    }
);

If you prefer not to use the ->login() function, you may use ->requestToken($returnUrl). This will return an object containing the key and secret or returns false if an error occurs, at that point you can use ->error() to get the array of the last occured error. Then use ->sendToVatsim() to get the URL for the redirect.

Validating login

After the login has been successful, we need to get the user data from VATSIM. Also for this we wrote a function to make it easier for you.

Parameters

Parameter Type Description
$key string The key stored in the session at login
$secret string The secret stored in the session at login
$verifier string The oauth_verifier passed in the query string
$success string | Closure Callback function containing the actions needed to be done when the login has been successful.
$error string | Closure Default: null – Callback function containing the actions needed to be done when authentication was unsuccessful (could be because of wrong key/secret/verifier)

For both $success and $error, you may pass a string in [class]@[method] format to call a function in another Model, otherwise pass an anonymous function.

Success

The success parameter returns two variables: $user and $request. The user variable will be an object containing all user data available to your organisation. The request variable will give you information about the request.

Error

Optional parameter. If this parameter is ignored and an error occurs, the function will return false. If you pass a function then one parameter will be returned $error, which is an array of data related to the last error.

Example

// Laravel
$session = Session::get('vatsimauth');

return VatsimSSO::validate(
    $session['key'],
    $session['secret'],
    Input::get('oauth_verifier'),
    function($user, $request) {
        // At this point we can remove the session data.
        Session::forget('vatsimauth');
        
        Auth::loginUsingId($user->id);
        return Redirect::home();
    },
    function($error) {
        throw new Exception('Could not authenticate: ' . $error['message']);
    }
);

// Outside Laravel
$session = $_SESSION['vatsimauth'];

$sso->validate(
    $session['key'],
    $session['secret'],
    $_GET['oauth_verifier'],
    function($user, $request) {
        // At this point we can remove the session data.
        unset($_SESSION['vatsimauth']);
        
        // do something to log the user in on your site using the user id
        // $user->id
        
        // Redirect home
        header('Location: /');
        die();
    }
);

If you prefer not to use the ->validate() function, you may use ->checkLogin($key, $secret, $verifier). This will return an object containing the user and request objects or returns false if an error occurs, at that point you can use ->error() to get the array of the last occured error.

License

MIT

Free Software, Hell Yeah!

vatsim/sso 适用场景与选型建议

vatsim/sso 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 22.21k 次下载、GitHub Stars 达 16, 最近一次更新时间为 2014 年 06 月 22 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「oauth」 「SSO」 「vatsim」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 vatsim/sso 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 vatsim/sso 我们能提供哪些服务?
定制开发 / 二次开发

基于 vatsim/sso 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 22.21k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 16
  • 点击次数: 17
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 16
  • Watchers: 5
  • Forks: 14
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2014-06-22