通过(Rest)API管理AzureSearch

时间:2017-05-19 08:22:01

标签: rest api azure azure-search azure-management-api

我正在尝试创建一个应该扩展Azure Search组件的“Replicas”和“Partitions”的工具。 为此,我阅读了Microsoft的以下文章:

https://docs.microsoft.com/en-us/rest/api/

现在,我无法通过验证Azure来获取AuthToken。 有没有办法让它更容易?或者,你们有一个如何做的样本吗?

以下是我的代码示例:

var clientId = "2aaced54873e4a94b6d5518bc815dcb1";
var redirectUri = new Uri("https://thissucks.search.windows.net");
var resource = "resource"; // What exactly should the value be?

var authContext =
    new AuthenticationContext(
        "https://login.windows.net/ba1cb781739c4cdea71c619ccba914e0/oauth2/authorize", new TokenCache());

var result = authContext.AcquireTokenAsync(resource, clientId, redirectUri, new PlatformParameters(PromptBehavior.Auto));
var result2 = result.Result;

调用此内容后,我会看到Azure登录屏幕。使用有效凭据登录后,我收到以下异常:

System.AggregateException:'发生了一个或多个错误。'

的InnerException:

AdalServiceException:AADSTS50001:在名为的租户中找不到名为的应用程序。
如果租户管理员尚未安装应用程序或租户中的任何用户同意该应用程序,则会发生这种情况。
您可能已将您的身份验证请求发送给错误的租户。

1 个答案:

答案 0 :(得分:2)

因此,您的代码中存在一些问题。

首先,请确保您已按照此处所述的步骤操作:https://docs.microsoft.com/en-us/rest/api。成功创建应用程序后,您必须记下该应用程序的客户端ID并在代码中使用它。

接下来,请确保ba1cb781739c4cdea71c619ccba914e0确实是租户ID。您还可以使用Azure AD域名(something.onmicrosoft.com)而不是此GUID类型值。因此,您的网址为https://login.windows.net/something.onmicrosoft.com/oauth2/authorize

最后,以下参数的值存在问题:

var redirectUri = new Uri("https://thissucks.search.windows.net");
var resource = "resource"; // What exactly should the value be?

redirectUri是用户成功通过身份验证后Azure AD将重定向的URI。对于Web Applications,它通常是您网站的网址。请确保它与您在Azure AD中创建应用程序时提供的值相匹配。当Azure AD将用户重定向到此URL时,它会在code查询字符串参数中传递JWT令牌,您可以使用该参数获取访问/刷新令牌。

resource是您获取令牌的资源。由于您要访问Resource Manager API,因此此处的值应为https://management.core.windows.net/