Skip to content

Instantly share code, notes, and snippets.

@sdushantha
Created February 27, 2023 11:46
Show Gist options
  • Save sdushantha/7f3c3a8d8973db1c95a987da805755af to your computer and use it in GitHub Desktop.
Save sdushantha/7f3c3a8d8973db1c95a987da805755af to your computer and use it in GitHub Desktop.
import requests
import jwt
import argparse
import sys
def get_exernal_object_id(target, token):
headers = {
'Host': 'teams.microsoft.com',
'Authorization': f"Bearer {token}",
'X-Ms-Client-Version': '1415/1.0.0.2023021323',
}
r = requests.get(f"https://teams.microsoft.com/api/mt/emea/beta/users/{target}/externalsearchv3?includeTFLUsers=true", headers=headers)
try:
return r.json()[0]["objectId"]
except (IndexError, KeyError):
return f"Object ID could not be found for {target}"
def get_internal_object_id(target, token):
headers = {
'Host': 'teams.microsoft.com',
'Authorization': f"Bearer {token}",
'Content-Length': str(len(target)),
}
r = requests.post('https://teams.microsoft.com/api/mt/emea/beta/users/searchV2?includeDLs=true&includeBots=true&enableGuest=true&source=allTrue&skypeTeamsInfo=true', headers=headers, data=target)
try:
return r.json()["value"][0]["objectId"]
except IndexError:
return f"Object ID could not be found for {target}"
def main():
parser = argparse.ArgumentParser(usage="%(prog)s [options]")
parser.add_argument("--jwt", "-j",
metavar="PATH",
required=True,
help="Path to file containing your Microsoft Teams JWT token")
parser.add_argument("--target", "-t",
metavar="EMAIL",
required=True,
help="Email address of the target you'd like to get the object id for")
args = parser.parse_args()
jwt_file = args.jwt
target = args.target
try:
with open(jwt_file) as f:
token = f.read().strip()
except FileNotFoundError:
print(f"ERROR: {jwt_file} could not be found")
sys.exit()
try:
decoded_jwt = jwt.decode(token, audience="https://api.spaces.skype.com", options={"verify_signature": False})
except jwt.exceptions.DecodeError:
print("ERROR: Invalid JWT token")
sys.exit()
# Your email address from the JWT token
email_addr = decoded_jwt["unique_name"]
email_addr_domain = email_addr.split("@")[1]
target_email_addr_domain = target.split("@")[1]
if email_addr_domain == target_email_addr_domain:
object_id = get_internal_object_id(target, token)
else:
object_id = get_exernal_object_id(target, token)
print(object_id)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment