我尝试在github示例下面进行Azure AD身份验证,并成功获取具有正确的回调URL的访问令牌。
根据我在https://apps.dev.microsoft.com中创建的应用程序修改和配置的Web.config密钥
<add key="ActiveDirectory.Mode" value="v1" />
<add key="ActiveDirectory.ResourceId" value="https://graph.microsoft.com" />
<add key="ActiveDirectory.EndpointUrl" value="https://login.microsoftonline.com" />
<add key="ActiveDirectory.Tenant" value="xyz-xyz" />
<add key="ActiveDirectory.ClientId" value="xyz-xyz" />
<add key="ActiveDirectory.ClientSecret" value="xyz-xyz" />
<add key="ActiveDirectory.RedirectUrl" value="http://localhost:3979/api/Callback" />
<add key="ActiveDirectory.Scopes" value="Calendars.Read,Calendars.ReadWrite,Contacts.Read,Contacts.ReadWrite,Mail.Read,Mail.ReadWrite,User.Read" />
我已经越过我收到的jwt.ms支票访问令牌。这是有效的令牌,其作用域定义与我在web.config中定义的完全相同。
我可以通过传递令牌来从API获取用户配置文件数据,但是在尝试调用用户的“联系人”时,却遇到了错误。
{
"error": {
"code": "ResourceNotFound",
"message": "Resource could not be discovered.",
"innerError": {
"request-id": "6f0f3ec9-76c9-4662-ac25-0bc73f887268",
"date": "2019-03-02T17:23:35"
}
}
}
代码调用联系人API调用。
//Get Logged in user contacts
public async Task<IUserContactsCollectionPage> GetMyContactsAsync()
{
var graphClient = GetAuthenticatedClient();
IUserContactsCollectionPage contacts = await graphClient.Me.Contacts.Request().GetAsync();
return contacts;
}
仅供参考:模拟器中显示的登录卡授权示例URL如下所示
https://login.microsoftonline.com/a76b43b0-3088-4c56-ba0d-01f317b1f18c/oauth2/authorize?resource=https:%2F%2Fgraph.microsoft.com&client_id=XYZ&response_type=code&haschrome=1&redirect_uri=http:%2F%2Flocalhost:3979%2Fapi%2FCallback&x-client-SKU=PCL.Desktop&x-client-Ver=3.13.9.1126&x-client-CPU=x64&x-client-OS=Microsoft+Windows+NT+10.0.16299.0&state=<stateID>
答案 0 :(得分:2)
它可能由于多种原因而发生,这是一个非常普遍的问题之一,即要求您的注册应用程序具有授予权限。确保已按照相应的步骤进行操作。
登录到门户,然后在应用程序注册下选择您的应用程序。 然后单击设置,看到以下屏幕截图:
单击“设置”后,将在右侧弹出新窗口,单击“必需的权限”菜单:请参见以下屏幕截图:
选择“必需的权限”菜单,然后单击“添加”按钮分配权限 参见下面的快照:
点击选择API选项,如下所示:
选择所需的API并选中您要访问的API。完成权限后,单击“完成”。完成此步骤后,您可以从应用程序访问所需的资源/范围。希望对您有所帮助。谢谢。 请参阅以下屏幕截图: