我正在尝试删除服务帐户的证书。我正在使用服务主体帐户Microsoft.Graph*(5.14.0)* 执行此操作,该帐户是全局管理员,对Graph具有必要的权限。此主帐户通过证书进行身份验证。
我在这里遵循了像MicrosoftIdentityPlatformProofTokenGenerator
这样的C#示例:
- https://learn.microsoft.com/en-us/graph/api/serviceprincipal-removekey?view=graph-rest-1.0&tabs=csharp
- https://learn.microsoft.com/en-us/graph/application-rollkey-prooftoken?tabs=csharp
我系统地得到一个Access Token missing or malformed
错误...表明问题肯定来自证明域
var requestBody = new Microsoft.Graph.ServicePrincipals.Item.RemoveKey.RemoveKeyPostRequestBody
{
KeyId = key.KeyId,
Proof = proof
};
try
{
await graphClient.ServicePrincipals[sp.Id].RemoveKey.PostAsync(requestBody);
}
catch (ODataError err)
{
var message = err.Error?.Message;
}
据我所知:
- 我们使用与发出调用的principalservice相关联的应用程序的对象ID创建证明(我也尝试使用sp的ID)。
- 我们使用principalservice的证书来生成一个证明令牌(我使用的证书与我用来标识自己的证书相同)。而且我也试过用我想删除的那个和sp的身份,但什么都没有)
- 或者使用Microsoft Graph ID作为受众(这不是很清楚,但我也尝试了AAD Graph API)
00000002-0000-0000-c000-000000000000
AAD图形API00000003-0000-0000-c000-000000000000
Microsoft Graph API- 我发送pfxFile(私钥和公钥)来生成证明
我做错了什么?
先谢谢你了
2条答案
按热度按时间ctehm74n1#
我生成了访问令牌,当我尝试**
removeKey
时,我得到了错误**,如下所示:如果传递无效的访问令牌来执行操作,或者aud与访问资源不匹配,通常会出现错误“Access Token missing or malformed”。
要解决错误,请检查以下内容:
=
'**填充字符是否存在于JWT头或有效载荷中,如果是,则删除它以避免Authentication_MissingOrMalformed
错误。确保授予管理员同意**
Application.ReadWrite.OwnedBy
**,如下所示:解码令牌,并确保aud是
00000003-0000-0000-c000-000000000000
或https://graph.microsoft.com
,并且存在所需的角色:在上面的代码中,将
servicePrincipal-id
替换为以下值:请确保访问令牌未过期或使用相同的令牌在Postman中进行测试。
以上更改后,我可以通过Postman成功removeKey,如下所示:
cl25kdpy2#
非常感谢您的回答!
在你的例子中,在我看来,我的令牌没有正确创建。
我使用文档[https://learn.microsoft.com/en-us/graph/application-rollkey-prooftoken?tabs=csharp][1]
1.应用/服务主体
当我读到你的例子时,你在
/applications/{id}/removeKey
上用postman发帖,但是c# graph API...在此处删除servicePrincipal的KeyCredentials
/servicePrincipals/{id}/removeKey
2. JWT内容
**M$**示例没有讨论要在令牌中指定的角色,也没有讨论将
https://graph.microsoft.com
放入aud
的可能性当尝试时,我仍然得到相同的错误。我的有效载荷:
我说明更多的上下文:
SP_1(objectID
f8d5d85a-...
)* 是ServicePrincipal (属于APP_1) 在我的Azure AD中是Global administrator
,并且在同意的情况下具有所有GraphApi访问权限*SP_1使用链接的spSP_2创建应用程序APP_2
工作流程
*SP_1加载SP_2信息
*SP_1removeKey在SP_2的KeyCredentials中
测试
POST
中发送的证明jwt是用以下命令生成的:-> I测试,aud=00000003-0000-0000-c 000 - 00000000000和00000002-0000-0000-c 000 - 0000000000
->我测试有和没有角色
->所有图API授权在APP_1和APP_2中创建
:'(