Commit 21e3db617601a5cc4897014330af3927247133b5
0 parents
Exists in
master
first commit
Showing 3 changed files with 191 additions and 0 deletions Side-by-side Diff
README.md
... | ... | @@ -0,0 +1,41 @@ |
1 | +## SSO Riau | |
2 | +SSO Riau | |
3 | + | |
4 | +Construct: | |
5 | +---- | |
6 | + | |
7 | +```$php | |
8 | +$this->clientId = ''; // 3rd Party client Id | |
9 | +$this->clientSecret = ''; // 3rd Party client secret | |
10 | +$this->redirectUri = ''; // 3rd Party url redirect or url to handle callback | |
11 | +$this->targetUri = 'https://sso.riau.go.id/'; // SSO Riau portal | |
12 | + | |
13 | +``` | |
14 | +Check SSO session : | |
15 | +---- | |
16 | + | |
17 | +```$php | |
18 | +use SsoRiau\SsoClientLibrary; | |
19 | +$objSso = new SsoClientLibrary(); | |
20 | +$objSso->ssoRequest(); | |
21 | + | |
22 | +``` | |
23 | +Consume SSO session : | |
24 | +---- | |
25 | + | |
26 | +```$php | |
27 | +$objSso = new SsoClientLibrary(); | |
28 | +$data_access_token = $objSso->ssoCallback(); | |
29 | +if (!empty($data_access_token)) { | |
30 | + $data_access_token = json_decode($data_access_token); | |
31 | + $access_token = $data_access_token->access_token; // store access_token within the session if needed? | |
32 | +} | |
33 | + | |
34 | +if ($access_token != '') { | |
35 | + //fetch ssoUserInfo | |
36 | + $ssoUserInfo = $objSso->ssoUserInfo($access_token); | |
37 | + $ssoUserInfo = json_decode($ssoUserInfo); | |
38 | + $email = $ssoUserInfo->email; | |
39 | +} | |
40 | + | |
41 | +``` | |
0 | 42 | \ No newline at end of file |
composer.json
... | ... | @@ -0,0 +1,22 @@ |
1 | +{ | |
2 | + "name": "ssoriau/ssoclientlibrary", | |
3 | + "description": "SsoClientLibrary", | |
4 | + "type": "library", | |
5 | + "license": "MIT", | |
6 | + "authors": [ | |
7 | + { | |
8 | + "name": "ssoriau", | |
9 | + "email": "sso@riau.go.id" | |
10 | + } | |
11 | + ], | |
12 | + "minimum-stability": "dev", | |
13 | + "prefer-stable": true, | |
14 | + "require": { | |
15 | + "php": ">=7.1" | |
16 | + }, | |
17 | + "autoload": { | |
18 | + "psr-4": { | |
19 | + "SsoRiau\\": "src/" | |
20 | + } | |
21 | + } | |
22 | +} |
src/SsoClientLibrary.php
... | ... | @@ -0,0 +1,128 @@ |
1 | +<?php | |
2 | + | |
3 | +namespace SsoRiau; | |
4 | + | |
5 | +/* | |
6 | + * Nama : File SSO Riau client library | |
7 | + * Tujuan : File ini dibuat dalam bentuk class objek sehingga dapat di integrasikan | |
8 | + * dengan aplikasi pihak ketiga yang ingin terhubung menggunakan aplikasi SSO | |
9 | + * Deskripsi Variable : | |
10 | + * $clientId | |
11 | + * - merupakan identitas unik ID yang diperoleh saat mendaftarkan | |
12 | + * aplikasi pihak ketiga pada aplikasi SSO | |
13 | + * $clientSecret | |
14 | + * - merupakan identitas unik Secret (rahasia) yang digunakan saat akses | |
15 | + * kepada aplikasi SSO sehingga diizinkan | |
16 | + * $redirectUri | |
17 | + * - merupakan alamat url yang akan mengelola hasil informasi login SSO | |
18 | + * $targetUri | |
19 | + * - adalah alamat website aplikasi SSO | |
20 | + * | |
21 | + */ | |
22 | + | |
23 | +class SsoClientLibrary { | |
24 | + | |
25 | + protected $clientId; | |
26 | + protected $clientSecret; | |
27 | + protected $redirectUri; | |
28 | + protected $targetUri; | |
29 | + | |
30 | + public function __construct() { | |
31 | + $this->clientId = ''; // 3rd Party client Id | |
32 | + $this->clientSecret = ''; // 3rd Party client secret | |
33 | + $this->redirectUri = ''; // 3rd Party url redirect or url to handle callback | |
34 | + $this->targetUri = 'https://sso.riau.go.id/'; // SSO Riau portal | |
35 | + } | |
36 | + | |
37 | + public function ssoRequest() { | |
38 | + $state = base64_encode(random_bytes(40)); | |
39 | + $query = http_build_query([ | |
40 | + 'client_id' => $this->clientId, | |
41 | + 'redirect_uri' => $this->redirectUri, | |
42 | + 'response_type' => 'code', | |
43 | + 'scope' => '', | |
44 | + 'state' => $state, | |
45 | + ]); | |
46 | + | |
47 | + $_url = $this->targetUri ."oauth/authorize?" . $query; | |
48 | + echo '<pre>';print_r($_url); | |
49 | + header("Location: " . $_url); | |
50 | + die(); | |
51 | + } | |
52 | + | |
53 | + public function ssoCallback() { | |
54 | + if (isset($_GET['code']) && !empty(($_GET['code']))) { | |
55 | + $_access_token = ''; | |
56 | + $_errors = ''; | |
57 | + | |
58 | + $_posts = [ | |
59 | + 'grant_type' => 'authorization_code', | |
60 | + 'client_id' => $this->clientId, | |
61 | + 'client_secret' => $this->clientSecret, | |
62 | + 'redirect_uri' => $this->redirectUri, | |
63 | + 'code' => $_GET['code'], | |
64 | + ]; | |
65 | + $arr_token = $this->__runCurl('POST', $this->targetUri."oauth/token", $_posts); | |
66 | + return $arr_token; | |
67 | + } | |
68 | + die('Something went wrong, please trace back your action!'); | |
69 | + } | |
70 | + | |
71 | + public function ssoUserInfo($access_token) { | |
72 | + if ($access_token != '') { | |
73 | + $header = [ | |
74 | + 'Content-Type: application/json', | |
75 | + 'Authorization: Bearer '.$access_token, | |
76 | + ]; | |
77 | + $user_info = $this->__runCurl('GET', $this->targetUri."api/userInfo", [], $header); | |
78 | + return $user_info; | |
79 | + } | |
80 | + die('Something went wrong, please trace back your action!'); | |
81 | + } | |
82 | + | |
83 | + public function ssoAsnInfo($access_token, $nip) { | |
84 | + if ($access_token != '' && $nip != '') { | |
85 | + $header = [ | |
86 | + 'Content-Type: application/json', | |
87 | + 'Authorization: Bearer '.$access_token, | |
88 | + ]; | |
89 | + | |
90 | + $query = http_build_query([ | |
91 | + 'nip' => $nip | |
92 | + ]); | |
93 | + $asn_info = $this->__runCurl('POST', $this->targetUri."api/userData?".$query, [], $header); | |
94 | + return $asn_info; | |
95 | + } | |
96 | + die('Something went wrong, please trace back your action!'); | |
97 | + } | |
98 | + | |
99 | + private function __runCurl($method = 'GET', $url, $data = [], $header = []) { | |
100 | + $error = ''; | |
101 | + $ch = curl_init($url); | |
102 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
103 | + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); | |
104 | + if ($method == 'POST') { | |
105 | + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
106 | + } | |
107 | + if (!empty($header)) { | |
108 | + curl_setopt($ch, CURLOPT_HTTPHEADER, $header); | |
109 | + } | |
110 | + //curl_setopt($ch, CURLOPT_TIMEOUT, 5); //timeout in seconds | |
111 | + //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); | |
112 | + //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); | |
113 | + | |
114 | + $response = curl_exec($ch); | |
115 | + if (curl_error($ch)) { | |
116 | + $error = curl_error($ch); | |
117 | + } | |
118 | + curl_close($ch); | |
119 | + | |
120 | + if ($error == '' && !empty($response)) { | |
121 | + return $response; | |
122 | + } else { | |
123 | + return $error; | |
124 | + } | |
125 | + die('Something went wrong, please trace back your action!'); | |
126 | + } | |
127 | + | |
128 | +} | |
0 | 129 | \ No newline at end of file |