吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 249|回复: 4
收起左侧

[其他原创] Discuz扩展:OAuth Provider模块

[复制链接]
hemingawa 发表于 2024-11-17 20:13
本帖最后由 hemingawa 于 2024-11-17 21:07 编辑

这个插件用来为discuz添加oauth登录功能,允许其他应用接入你的discuz做授权登录。

安装方法:
        将其中的auth目录放在discuz根目录下就行。

API信息:
        授权端点:auth/oauth.php
        Token端点:auth/token.php
        用户信息端点:auth/whoami.php

代码:
OAuth.php 代码:
[PHP] 纯文本查看 复制代码
<?php
require_once '../source/class/class_core.php';
require_once '../source/function/function_home.php';

$discuz = C::app();
$discuz->init();

if($_G['uid'] == 0){
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    header("Location: https://discuz.openclipsis.top/member.php?mod=logging&action=login&referer=".urlencode($url));
}

// ClientID 是 SecretID 的md5哈希值
$client_id = isset($_REQUEST["client_id"])?$_REQUEST["client_id"]:"";
$state = isset($_REQUEST["state"])?$_REQUEST["state"]:"";
$redirect = isset($_REQUEST["redirect_uri"])?$_REQUEST["redirect_uri"]:"about:blank";

// 加签
$code = $_G['uid'].".".time().".".md5($_G['uid']."@".time()."@".$client_id);

if(strstr($redirect, '?') != false){
    $authlink = $redirect."&state=".$state."&code=".$code;
}else{
    $authlink = $redirect."?state=".$state."&code=".$code;
}

?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>Authenticate</title>
    </head>
    <body>
        警告:您正在将您的论坛账号授权给第三方!<br/>
        Redirect URL:<?php echo $redirect;?><br/>
        申请的权限:
        <ul>
            <li>读取您的账户基本信息</li>
        </ul>
        如果您信任该第三方,请点击:<a href="<?php echo $authlink;?>"><button>授权</button></a>
    </body>
</html>


Token.php 代码:
[PHP] 纯文本查看 复制代码
<?php
if (!isset($_REQUEST["grant_type"])){
    die("method err");
}
// Auth
if ($_REQUEST["grant_type"] == "authorization_code"){
    if(!isset($_REQUEST["code"]) || !isset($_REQUEST["client_secret"])){
        die("method err");
    }
    $client_id = md5($_REQUEST["client_secret"]);
    $splitter = explode(".",$_REQUEST["code"]);
    if(count($splitter) != 3){
        die("code err");
    }
    $uid = (int)($splitter[0]);
    $time = (int)($splitter[1]);
    $sign = md5($uid."@".$time."@".$client_id);
    if($sign != $splitter[2]){
        die("sig err");
    }
    if(time() - $time > 86400){
        die("time expire");
    }
    $token = ($uid * 2 + 441)."-".time()."-".md5($uid."-".time()."sig");
    die(json_encode(array(
        "access_token"=>$token
    )));
}
?>


Whoami.php 代码:
[PHP] 纯文本查看 复制代码
<?php
require_once '../config/config_ucenter.php';
require_once '../uc_client/client.php';

if(!isset($_REQUEST["access_token"])){
    die("method err");
}

$waa = explode("-",$_REQUEST["access_token"]);
if(count($waa) != 3){
    die("code err");
}
$at = $waa[0];
$uid = ((int)($at) - 441) / 2;

if(md5($uid."-".$waa[1]."sig") != $waa[2]){
    die("sign err");
}
$time = $waa[1];
if(time() - $time > 86400){
    die("login expired");
}

if($data = uc_get_user($uid,1)) {
        list($uid, $username, $email) = $data;
} else {
        die("not this user");
}

die(json_encode(array(
    "id"=>(int)($uid),
    "name"=>"w".substr(md5($uid."ppte2"),4,11),
    "nickname"=>$username,
    "avatar_url"=>UC_API."/avatar.php?uid=".$uid,
    "url"=>"https://discuz.openclipsis.top/space-uid-".$uid.".html",
    "html_url"=>"https://discuz.openclipsis.top/space-uid-".$uid.".html",
    "email"=>$email
)));
?>


使用方法:
        1,Client Key创建:
                Client Secret可以自行任取,Client ID是Client Secret的MD5哈希值。
        2,接入授权:
                通过OAuth 2.0协议接入授权即可。

auth.zip (2.47 KB, 下载次数: 4)

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

PaulYangss 发表于 2024-11-21 15:42
我试一试吧
苏紫方璇 发表于 2024-11-17 20:47
请在帖子中粘贴部分核心代码
一、本版块仅限分享编程技术和源码相关内容,发布帖子必须带上关键代码和具体功能介绍【20220924强制执行】
xueyan888 发表于 2024-11-17 21:44
 楼主| hemingawa 发表于 2024-11-17 20:59
苏紫方璇 发表于 2024-11-17 20:47
请在帖子中粘贴部分核心代码
一、本版块仅限分享编程技术和源码相关内容,发布帖子必须带上关键代码和具体 ...

已经把所有代码全粘贴到帖子里了awa
反正也没几行代码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表