我正在嘗試呼叫我使用 C# 和機器學習 REST api 設定的 Azure 機器學習管道端點。
我確信我已經正確配置了服務主體,因為我可以使用azureml-corepython sdk成功驗證并命中端點:
sp = ServicePrincipalAuthentication(
tenant_id=tenant_id,
service_principal_id=service_principal_id,
service_principal_password=service_principal_password)
ws =Workspace.get(
name=workspace_name,
resource_group=resource_group,
subscription_id=subscription_id,
auth=sp)
endpoint = PipelineEndpoint.get(ws, name='MyEndpoint')
endpoint.submit('Test_Experiment')
我在 C# 中使用以下示例來嘗試運行我的端點:https : //docs.microsoft.com/en-us/azure/machine-learning/how-to-deploy-pipelines#run-a-published-管道使用-c
我正在嘗試填寫auth_key以下代碼:
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var cred = new ClientSecretCredential(tenantId, clientId, clientSecret);
var auth_key = cred.GetToken(new Azure.Core.TokenRequestContext(new string[] {".default" }));
我收到 401(未經授權)。
我做錯了什么?
- 更新 *
我將 'scopes' 引數更改TokenRequestContext為如下所示:
var auth_key = cred.GetToken(new Azure.Core.TokenRequestContext(new string[] { "http://DataTriggerApp/.default" }));
http://DataTriggerApp是servicePrincipalNames當我從 azure CLI 查詢我的服務主體時出現的其中之一。
現在,當我嘗試使用回傳的令牌呼叫機器學習管道端點時,我收到了 403 而不是 401。也許有一些進展?
uj5u.com熱心網友回復:
好的,通過大量的反復試驗,我想出了兩種獲取令牌的方法,允許我通過 REST api 訪問我的 Azure 機器學習管道端點。一種使用 Microsoft.Identity.Client,另一種使用 Azure.Identity。
using Microsoft.Identity.Client;
...
public static async Task<string> GetAccessToken()
{
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
.Build();
var result = await app.AcquireTokenForClient(new string[] { "https://ml.azure.com/.default" }).ExecuteAsync();
return result.AccessToken;
}
或者:
using Azure.Identity;
...
public static async Task<string> GetAccessToken()
{
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var cred = new ClientSecretCredential(tenantId, clientId, clientSecret);
var token = await cred.GetTokenAsync(new Azure.Core.TokenRequestContext(new string[] { "https://ml.azure.com/.default" }));
return token.Token;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319023.html
標籤:C# 天蓝色 asp.net-core-3.1 azure-machine-learning-service azure-service-principal
上一篇:/usr/local/重置天藍色比例集上的自定義centos7影像
下一篇:Spark-使用堆外記憶體
