首页 文章

如何使用Microsoft Graph API获取AppKey

提问于
浏览
0

我正在创建新的应用程序

POST https://graph.microsoft.com/beta/applications

我可以恢复AppId,但无法找到获取AppKey的方法 . 我想稍后使用应用程序凭据访问该应用程序 .

更新:我在应用程序创建期间作为密码凭据发送的内容:

newAppObj.passwordCredentials = new List<AOBJ.AzurePasswordCredential>(){
            new AOBJ.AzurePasswordCredential()
            {
                customKeyIdentifier = "T1rEXhNmUUmVqimnBPkirw==",
                keyId = Guid.NewGuid().ToString(),
                value = "WgjbF8vG3GM1XRGpc43fvtiO7ScpTGwh0jd6CjIRd40dCX3kP8LMlCdcrrEPBRidI4CXW1OCnSQJQxOzX+oIUw==",
                startDate ="2016-06-01T13:59:30Z",// DateTimeOffset.UtcNow,
                endDate = "2017-06-02T13:59:30Z"//DateTimeOffset.UtcNow.AddYears(2)
            }
        };

当我然后使用我之前设置的密钥生成授权令牌作为值时,我得到此响应,当尝试使用时调用MicrosoftGraph API:

{
  "error": {
    "code": "Authorization_IdentityNotFound",
    "message": "The identity of the calling application could not be established.",
    "innerError": {
      "request-id": "42d3f97d-5ccb-4680-a6c2-dceb160d19c7",
      "date": "2016-06-02T21:03:31"
    }
  }
}

当我通过Azure门户手动创建密钥时,api调用正常 .

更新2:

所以,事实证明,创建应用程序的POST没有创建底层的 ServicePrincipal 对象 . 我必须在创建应用程序后创建它 .

var servicePrincipal = O365OutlookClient.GetServicePrincipalForApp(InOnBoardingToken, createdAppObj.appId);
               if (servicePrincipal== null || servicePrincipal.appId==null)
               {
                   var servicePrincipalObj = new AOBJ.AzureServicePrincipal();
                   servicePrincipalObj.appId = createdAppObj.appId;
                   servicePrincipalObj.displayName = createdAppObj.displayName;
                   servicePrincipalObj.accountEnabled = true;
                   var servicePrincipalJson = O365OutlookClient.PostServicePrincipalSync(InOnBoardingToken, servicePrincipalObj);
               }

1 回答

  • 1

    应用程序密码凭据需要由您生成和设置(在创建应用程序时,或稍后作为应用程序的 PATCH ) . 您可以通过生成强随机值,创建passwordCredential并将其添加到 passwordCredentials 集合来执行此操作:

    {
      /* ... */
      "passwordCredentials": [
        {
          "customKeyIdentifier": "T1rEXhNmUUmVqimnBPkirw==",
          "endDate": "2016-06-02T13:59:30Z",
          "keyId": "e4003ae7-15be-487a-92d7-5d75aafdb4dc",
          "startDate": "2016-06-02T13:59:30Z",
          "value": "WgjbF8vG3GM1XRGpc43fvtiO7ScpTGwh0jd6CjIRd40dCX3kP8LMlCdcrrEPBRidI4CXW1OCnSQJQxOzX+oIUw=="
        }
      ]
      /* ... */
    }
    

    customKeyIdentifier 是base64编码的字节数组(可以是任何你想要的), keyId 是新生成的Guid, startDateendDate 是密码凭证有效的日期 . 实际的密钥存储在 value 中 .

相关问题