1

我正在尝试创建一个应用程序,该应用程序自动将数据发送到我的 Azure 区块链工作台上的智能合约。

问题是,我不明白如何获取不记名令牌。网上有一个示例,我可以在其中了解如何使用 GET 和 POST 请求调用 API。但我必须提交一个客户端应用程序 ID、一个客户端密码和一个资源 ID。我从哪里得到它们?

非常感谢您的帮助和想法!

class Program
{
    public static readonly string AUTHORITY = "https://login.microsoftonline.com/XXX";
    public static readonly string WORKBENCH_API_URL = "https://XXX-api.azurewebsites.net";
    public static readonly string RESOURCE = "XXX";
    public static readonly string CLIENT_APP_Id = "XXX";
    public static readonly string CLIENT_SECRET = "XXX";

    static async Task Main(string[] args)
    {
        AuthenticationContext authenticationContext = new AuthenticationContext(AUTHORITY);
        ClientCredential clientCredential = new ClientCredential(CLIENT_APP_Id, CLIENT_SECRET);

        // Sample API Call
        try
        {
            // Getting the token, it is recommended to call AcquireTokenAsync before every Workbench API call
            // The library takes care of refreshing the token when it expires
            var result = await authenticationContext.AcquireTokenAsync(RESOURCE, clientCredential).ConfigureAwait(false);

            Console.WriteLine(result.AccessToken);

            // Using token to call Workbench's API
            //HttpClient client = new HttpClient();
            //client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            //client.DefaultRequestHeaders
            //                .Accept
            //                .Add(new MediaTypeWithQualityHeaderValue("application/json"));

            //// Get Users
            //var response = await client.GetAsync($"{WORKBENCH_API_URL}/api/v1/contracts");
            //var users = await response.Content.ReadAsStringAsync();


            var client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("Bearer", result.AccessToken);
            var content = await client.GetStringAsync($"{WORKBENCH_API_URL}/api/v1/contracts");


            Console.WriteLine(content);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }
}

}

4

1 回答 1

1

根据我的测试,当我们成功创建 Azure 区块链工作台后,我们第一次访问 Azure 区块链工作台时需要配置 Azure AD,同时我们会创建 Azure AD 应用程序。资源是 Azure AD 应用程序的应用程序 ID 或应用程序 url。更多详细信息,请参阅文档

例如

  1. 访问 Azure 区块链工作台

  2. 配置 Azure AD 在此处输入图像描述 在此处输入图像描述

  3. 创建服务主体以访问 Workbench API

cd; Invoke-WebRequest -Uri https://aka.ms/createWorkbenchServicePrincipalScript -OutFile createWorkbenchServicePrincipal.ps1
./createWorkbenchServicePrincipal.ps1 -TenantName <the tenant you use above> -WorkbenchAppId <the appid you copy> -MakeAdmin (optional)

在此处输入图像描述

  1. 获取令牌
Method: POST
URL: https://login.microsoftonline.com/<tenant id>/oauth2/token
Headers: Content-Type: application/x-www-form-urlencoded

Body:
     grant_type: client_credentials 
     client_id: <sp client id>
     client_secret:<sp client secret>
     resource: <the app id>

在此处输入图像描述

  1. 调用休息api
URL: {WORKBENCH_API_URL}/api/v1/users
Headers: Authorization Bearer <access_token>

在此处输入图像描述

于 2019-11-28T02:02:13.487 回答