镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Event loop is closed using RemovePasswordPostRequestBody #1093

Description

@jouellnyc

Describe the bug

I am trying to delete multiple app secrets in Azure. One key is deleted but it does not advance. I can add secrets just fine. I can delete ONE secret typically. But deleting multiple secrets ends with "Event loop is closed".

Expected behavior

I can add secrets just fine. I can delete ONE secret -- typically. But multiple fail as above.

How to reproduce

This code reproduces the problem:

from msgraph import GraphServiceClient
from azure.identity import ClientSecretCredential
from creds import tenant_id, client_id, client_secret

from msgraph.generated.applications.item.remove_password.remove_password_post_request_body import RemovePasswordPostRequestBody

credential = ClientSecretCredential(
    tenant_id=tenant_id,
    client_id=client_id,
    client_secret=client_secret
)

from uuid import UUID

scopes = ['https://graph.microsoft.com/.default']
graph_client = GraphServiceClient(credential, scopes)

async def show_secrets():
    result = await graph_client.applications.by_application_id(OBJECT_ID).get()
    return result

async def delete_older_secrets():
    try:
        for one_secret in str_not_uuids:
            print(f"== {one_secret}")
            if one_secret == "__CURRENT__":
                print("passing current")
                continue 
            request_body = RemovePasswordPostRequestBody(key_id=UUID(one_secret),)
            result = await graph_client.applications.by_application_id(
                "OBJECT_ID"
            ).remove_password.post(request_body)
    except Exception as e:
        print(e)
    else:
        print('ok')


if __name__ == '__main__':
    import asyncio
    import operator
    all_secrets=asyncio.run(show_secrets())
    str_not_uuids=[str(x.key_id) for x in all_secrets.password_credentials]
    asyncio.run(delete_older_secrets())

SDK Version

pip freeze | grep -iE "graph|azure"
azure-common==1.1.28
azure-core==1.32.0
azure-graphrbac==0.61.2
azure-identity==1.19.0
cryptography==44.0.0
microsoft-kiota-authentication-azure==1.7.1
msgraph-beta-sdk==1.17.0
msgraph-core==1.2.0
msgraph-sdk==1.17.0
msrestazure==0.6.4.post1

Latest version known to work for scenario above?

unknown

Known Workarounds

I can use msal in a non asyncio loop:

import msal
import requests

def remove_application_secrets(tenant_id, client_id, client_secret, secret_ids):

    authority = f"[https://login.microsoftonline.com/{tenant_id}](https://login.microsoftonline.com/%7Btenant_id%7D)"
    app = msal.ConfidentialClientApplication(
    client_id,
    authority=authority,
    client_credential=client_secret

)

result = app.acquire_token_for_client(scopes=["[https://graph.microsoft.com/.default"]](https://graph.microsoft.com/.default%22]))

if "access_token" not in result:
    print(result.get("error"))
    print(result.get("error_description"))
    return

# Remove each secret
headers = {
'Authorization': 'Bearer ' + result['access_token'],
'Content-Type': 'application/json'
}


for secret_id in secret_ids:

try:

   url = f"[https://graph.microsoft.com/v1.0/applications/{object_id}/removePassword] 
   (https://graph.microsoft.com/v1.0/applications/%7Bobject_id%7D/removePassword)"

    payload = {"keyId": secret_id}
    response = requests.post(url, headers=headers, json=payload)
    if response.status_code == 204:
    print(f"Successfully removed secret with ID: {secret_id}")

else:

    print(f"Failed to remove secret {secret_id}. Status code: {response.status_code}")
    print(response.text)

except Exception as e:
    print(f"Error removing secret {secret_id}: {str(e)}")
    remove_application_secrets(

client_id=client_id,
tenant_id=tenant_id,
client_secret=client_secret,
secret_ids=['blah1', 'blah2']
)

Debug output

Event loop is closed

Configuration

cat /etc/os-release 
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

Other information

No response

Activity

  1. added
    priority:p2Medium. For a p2 bug, generally have a work-around. Bug SLA <=30 days
    and removed on Feb 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:p2Medium. For a p2 bug, generally have a work-around. Bug SLA <=30 daystype:bugA broken experience

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions