Skip to content

Commit 5fb5c95

Browse files
committed
Fixed revoke API logic
1 parent 83a261b commit 5fb5c95

5 files changed

Lines changed: 29 additions & 17 deletions

File tree

‎Article.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -733,34 +733,38 @@ POST /auth/oauth2/v1/revoke HTTP/1.1
733733
Accept: */*
734734
Content-Type: application/x-www-form-urlencoded
735735
Host: api.refinitiv.com:443
736-
Authorization: Basic <App Key in Base64>
736+
Authorization: Basic <App Key+":" in Base64>
737737
Content-Length: XXX
738738
739739
token={current_Access_token}
740740
```
741741

742+
**Note**:
743+
- Please be noticed **":"** string after the **App Key**.
744+
- The ```/revoke``` endpoint does not use the ```password``` in a Basic Authorization, so we need to send empty password in ```AppKey:``` format.
745+
742746
Python code:
747+
743748
```Python
744749
#step 7 - Revoking Token
745750
import base64
746751

747-
clientId_bytes = clientId.encode('ascii')
752+
clientId_bytes = f'{clientId}:'.encode('ascii') #Please be noticed ":" string after the app-key
748753
base64_bytes = base64.b64encode(clientId_bytes)
749754
clientId_base64 = base64_bytes.decode('ascii')
750755

751756
# Send HTTP Request
752757
auth_url = f'{RDP_HOST}/auth/oauth2/v1/revoke'
753758
payload = f'token={access_token}'
754-
auth_response = None
759+
auth_response = None
755760

756761
try:
757762
auth_response = requests.post(auth_url,
758763
headers = {
759764
'Content-Type':'application/x-www-form-urlencoded',
760765
'Authorization': f'Basic {clientId_base64}'
761766
},
762-
data = payload,
763-
auth = (clientId, '')
767+
data = payload
764768
)
765769
except requests.exceptions.RequestException as exp:
766770
print(f'Caught exception: {exp}')
@@ -771,6 +775,7 @@ if auth_response.status_code != 200:
771775
print(f'RDP authentication failure: {auth_response.status_code} {auth_response.reason}')
772776
print(f'Text: {auth_response.text}')
773777
```
778+
774779
That’s all I have to say about the CFS API workflow.
775780

776781
## <a id="how_to_run"></a>How to run the demo application

‎RDP-Generic-CFS.html‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8787,11 +8787,16 @@ <h3 id="Step-7:-Revoke-Token-to-ending-the-session.">Step 7: Revoke Token to end
87878787
<span class="na">Accept</span><span class="o">:</span> <span class="l">*/*</span>
87888788
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/x-www-form-urlencoded</span>
87898789
<span class="na">Host</span><span class="o">:</span> <span class="l">api.refinitiv.com:443</span>
8790-
<span class="na">Authorization</span><span class="o">:</span> <span class="l">Basic &lt;App Key in Base64&gt;</span>
8790+
<span class="na">Authorization</span><span class="o">:</span> <span class="l">Basic &lt;App Key+":" in Base64&gt;</span>
87918791
<span class="na">Content-Length</span><span class="o">:</span> <span class="l">XXX</span>
87928792

87938793
<span class="nt">token</span><span class="o">=</span><span class="s">{current_Access_token}</span>
87948794
</pre></div>
8795+
<p><strong>Note</strong>:</p>
8796+
<ul>
8797+
<li>Please be noticed <strong>":"</strong> string after the <strong>App Key</strong>.</li>
8798+
<li>The <code>/revoke</code> endpoint does not use the <code>password</code> in a Basic Authorization, so we need to send empty password in <code>AppKey:</code> format.</li>
8799+
</ul>
87958800
</div>
87968801
</div>
87978802
</div>
@@ -8807,7 +8812,7 @@ <h3 id="Step-7:-Revoke-Token-to-ending-the-session.">Step 7: Revoke Token to end
88078812

88088813
<span class="kn">import</span><span class="w"> </span><span class="nn">base64</span>
88098814

8810-
<span class="n">clientId_bytes</span> <span class="o">=</span> <span class="n">clientId</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">'ascii'</span><span class="p">)</span>
8815+
<span class="n">clientId_bytes</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">clientId</span><span class="si">}</span><span class="s1">:'</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">'ascii'</span><span class="p">)</span> <span class="c1">#Please be noticed ":" string after the app-key</span>
88118816
<span class="n">base64_bytes</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64encode</span><span class="p">(</span><span class="n">clientId_bytes</span><span class="p">)</span>
88128817
<span class="n">clientId_base64</span> <span class="o">=</span> <span class="n">base64_bytes</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'ascii'</span><span class="p">)</span>
88138818

@@ -8822,8 +8827,7 @@ <h3 id="Step-7:-Revoke-Token-to-ending-the-session.">Step 7: Revoke Token to end
88228827
<span class="s1">'Content-Type'</span><span class="p">:</span><span class="s1">'application/x-www-form-urlencoded'</span><span class="p">,</span>
88238828
<span class="s1">'Authorization'</span><span class="p">:</span> <span class="sa">f</span><span class="s1">'Basic </span><span class="si">{</span><span class="n">clientId_base64</span><span class="si">}</span><span class="s1">'</span>
88248829
<span class="p">},</span>
8825-
<span class="n">data</span> <span class="o">=</span> <span class="n">payload</span><span class="p">,</span>
8826-
<span class="n">auth</span> <span class="o">=</span> <span class="p">(</span><span class="n">clientId</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
8830+
<span class="n">data</span> <span class="o">=</span> <span class="n">payload</span>
88278831
<span class="p">)</span>
88288832
<span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">RequestException</span> <span class="k">as</span> <span class="n">exp</span><span class="p">:</span>
88298833
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Caught exception: </span><span class="si">{</span><span class="n">exp</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>

‎RDP-Generic-CFS.ipynb‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"source": [
88
"# RDP Generic CFS File Workflow\n",
99
"\n",
10-
"**Last Update**: June 2025\n",
10+
"**Last Update**: August 2025\n",
1111
"\n",
1212
"Example Code Disclaimer:\n",
1313
"ALL EXAMPLE CODE IS PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS FOR ILLUSTRATIVE PURPOSES ONLY. LSEG MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THE EXAMPLE CODE, OR THE INFORMATION, CONTENT, OR MATERIALS USED IN CONNECTION WITH THE EXAMPLE CODE. YOU EXPRESSLY AGREE THAT YOUR USE OF THE EXAMPLE CODE IS AT YOUR SOLE RISK."
@@ -1090,11 +1090,15 @@
10901090
"Accept: */*\n",
10911091
"Content-Type: application/x-www-form-urlencoded\n",
10921092
"Host: api.refinitiv.com:443\n",
1093-
"Authorization: Basic <App Key in Base64>\n",
1093+
"Authorization: Basic <App Key+\":\" in Base64>\n",
10941094
"Content-Length: XXX\n",
10951095
"\n",
10961096
"token={current_Access_token}\n",
1097-
"```"
1097+
"```\n",
1098+
"\n",
1099+
"**Note**: \n",
1100+
"- Please be noticed **\":\"** string after the **App Key**. \n",
1101+
"- The ```/revoke``` endpoint does not use the ```password``` in a Basic Authorization, so we need to send empty password in ```AppKey:``` format."
10981102
]
10991103
},
11001104
{
@@ -1116,7 +1120,7 @@
11161120
"\n",
11171121
"import base64\n",
11181122
"\n",
1119-
"clientId_bytes = clientId.encode('ascii')\n",
1123+
"clientId_bytes = f'{clientId}:'.encode('ascii') #Please be noticed \":\" string after the app-key\n",
11201124
"base64_bytes = base64.b64encode(clientId_bytes)\n",
11211125
"clientId_base64 = base64_bytes.decode('ascii')\n",
11221126
"\n",
@@ -1131,8 +1135,7 @@
11311135
" 'Content-Type':'application/x-www-form-urlencoded',\n",
11321136
" 'Authorization': f'Basic {clientId_base64}'\n",
11331137
" }, \n",
1134-
" data = payload, \n",
1135-
" auth = (clientId, '')\n",
1138+
" data = payload\n",
11361139
" )\n",
11371140
"except requests.exceptions.RequestException as exp:\n",
11381141
" print(f'Caught exception: {exp}')\n",

‎RDP-Generic-CFS.pdf‎

3.38 KB
Binary file not shown.

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# A Generic and Step By Step Workflow for RDP Client File Store (CFS) File API
2-
- version: 1.0.8
3-
- Last update: February 2025
2+
- version: 1.0.9
3+
- Last update: August 2025
44
- Environment: Jupyter Notebook
55
- Prerequisite: [Access to RDP credentials](#prerequisite)
66

0 commit comments

Comments
 (0)