Office 365 Rest Api 获取访问令牌时遇到问题
Office 365 Rest Api Having issues getting access token
到目前为止我有这个。
public static async Task<OutlookServicesClient> CreateOutlookClientAsync(string capability)
{
try
{
string authority = CommonAuthority;
// Create an AuthenticationContext using this authority.
_authenticationContext = new AuthenticationContext(authority);
//See the Discovery Service Sample (https://github.com/OfficeDev/Office365-Discovery-Service-Sample)
//for an approach that improves performance by storing the discovery service information in a cache.
DiscoveryClient discoveryClient = new DiscoveryClient(
async () => await GetTokenHelperAsync(_authenticationContext, DiscoveryResourceId));
// Get the specified capability ("Contacts").
CapabilityDiscoveryResult result =
await discoveryClient.DiscoverCapabilityAsync(capability);
var client = new OutlookServicesClient(
result.ServiceEndpointUri,
async () =>
await GetTokenHelperAsync(_authenticationContext, result.ServiceResourceId));
return client;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
if (_authenticationContext != null && _authenticationContext.TokenCache != null)
_authenticationContext.TokenCache.Clear();
return null;
}
}
}
private static async Task<string> GetTokenHelperAsync(AuthenticationContext context, string resourceId)
{
string accessToken = null;
AuthenticationResult result = null;
string myId = WebConfigurationManager.AppSettings["ida:ClientID"];
string myKey = WebConfigurationManager.AppSettings["ida:Password"];
ClientCredential client = new ClientCredential(myId,myKey);
result = await context.AcquireTokenAsync(resourceId, client);
//result =context.AcquireToken(resourceId, ClientID,_returnUri);
accessToken = result.AccessToken;
return accessToken;
}
当我得到结果时,如果我使用 AcquireTokenAsync 我得到一个错误,指出在目录 api.office.com 中找不到标识符为 XXXX 的应用程序,否则如果我 运行 AcquireToken 我得到登录模式弹出,但发生错误,指示请求必须包含 client_secret .
我不知道如何解决这个问题我怀疑它可能与实际的应用程序配置有关我已经尝试在 Azure AD 中创建我自己的应用程序并使用 VS Connected Service,还有其他人运行成类似问题?
根据您看到的错误,您的应用的注册方式似乎存在问题。第一个错误通常发生在应用程序未标记为多租户时,并且您使用注册应用程序的租户以外的租户登录应用程序。
第二个错误很奇怪。客户端机密是您从 ida:Password
元素中读取并传入 ClientCredential 对象的内容。
我昨天刚刚发布了一个 .NET tutorial 来介绍如何设置这些东西。看看这是否有助于您畅通无阻。
到目前为止我有这个。
public static async Task<OutlookServicesClient> CreateOutlookClientAsync(string capability)
{
try
{
string authority = CommonAuthority;
// Create an AuthenticationContext using this authority.
_authenticationContext = new AuthenticationContext(authority);
//See the Discovery Service Sample (https://github.com/OfficeDev/Office365-Discovery-Service-Sample)
//for an approach that improves performance by storing the discovery service information in a cache.
DiscoveryClient discoveryClient = new DiscoveryClient(
async () => await GetTokenHelperAsync(_authenticationContext, DiscoveryResourceId));
// Get the specified capability ("Contacts").
CapabilityDiscoveryResult result =
await discoveryClient.DiscoverCapabilityAsync(capability);
var client = new OutlookServicesClient(
result.ServiceEndpointUri,
async () =>
await GetTokenHelperAsync(_authenticationContext, result.ServiceResourceId));
return client;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
if (_authenticationContext != null && _authenticationContext.TokenCache != null)
_authenticationContext.TokenCache.Clear();
return null;
}
}
}
private static async Task<string> GetTokenHelperAsync(AuthenticationContext context, string resourceId)
{
string accessToken = null;
AuthenticationResult result = null;
string myId = WebConfigurationManager.AppSettings["ida:ClientID"];
string myKey = WebConfigurationManager.AppSettings["ida:Password"];
ClientCredential client = new ClientCredential(myId,myKey);
result = await context.AcquireTokenAsync(resourceId, client);
//result =context.AcquireToken(resourceId, ClientID,_returnUri);
accessToken = result.AccessToken;
return accessToken;
}
当我得到结果时,如果我使用 AcquireTokenAsync 我得到一个错误,指出在目录 api.office.com 中找不到标识符为 XXXX 的应用程序,否则如果我 运行 AcquireToken 我得到登录模式弹出,但发生错误,指示请求必须包含 client_secret .
我不知道如何解决这个问题我怀疑它可能与实际的应用程序配置有关我已经尝试在 Azure AD 中创建我自己的应用程序并使用 VS Connected Service,还有其他人运行成类似问题?
根据您看到的错误,您的应用的注册方式似乎存在问题。第一个错误通常发生在应用程序未标记为多租户时,并且您使用注册应用程序的租户以外的租户登录应用程序。
第二个错误很奇怪。客户端机密是您从 ida:Password
元素中读取并传入 ClientCredential 对象的内容。
我昨天刚刚发布了一个 .NET tutorial 来介绍如何设置这些东西。看看这是否有助于您畅通无阻。