import requests from urllib.parse import urlencode, urlparse client_id = '' client_secret = '' instance = '' tenant_id = '' redirect_uri = '' tenant_url = 'https://{instance}.api.crm4.dynamics.com' # 👈 Replace this with your actual instance redirect_uri = '' auth_url = 'https://login.microsoftonline.com/common/oauth2/authorize' token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/token' def get_authorization_code(): params = { 'client_id': client_id, 'response_type': 'code', 'redirect_uri': redirect_uri, 'resource': tenant_url, 'state': 'xyz123' } authorization_url = auth_url + '?' + urlencode(params) print("\n Open the following URL in your browser and authenticate:") print(authorization_url) print("\n After login, paste the full redirected URL here:") redirected_url = input("Redirected URL: ").strip() parsed = urlparse(redirected_url) query_params = dict(param.split('=') for param in parsed.query.split('&') if '=' in param) code = query_params.get('code') if not code: print("Authorization code not found. Double-check the URL.") return None return code def exchange_code_for_tokens(auth_code): data = { 'grant_type': 'authorization_code', 'client_id': client_id, 'client_secret': client_secret, 'redirect_uri': redirect_uri, 'code': auth_code, 'resource': tenant_url } response = requests.post(token_url, data=data) if response.status_code == 200: tokens = response.json() return tokens.get('access_token'), tokens.get('refresh_token') else: print("Token exchange failed:", response.text) return None, None def save_tokens(auth_code, access_token, refresh_token): """Save tokens to a local file and copy the path and paste it below.Provided the sample""" path = "C:\\Users\\xyz\\new folder\\Desktop\\dynamics365_tokens.txt" with open(path, "w") as f: f.write(f"Authorization Code:\n{auth_code}\n\n") f.write(f"Access Token:\n{access_token}\n\n") f.write(f"Refresh Token:\n{refresh_token}\n\n") print(f"✅ Tokens saved to: {path}") if __name__ == "__main__": code = get_authorization_code() if code: access_token, refresh_token = exchange_code_for_tokens(code) if access_token: save_tokens(code, access_token, refresh_token) else: print(" Failed to retrieve tokens.")