Надежный способ аутентификации вашей функции Azure против списка SharePoint, используя управляемую функцию AzureC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Надежный способ аутентификации вашей функции Azure против списка SharePoint, используя управляемую функцию Azure

Сообщение Anonymous »

У меня есть функция Azure, которая мы включили его управляемую идентичность следующим образом:-
. Техническая документация https://learn.microsoft.com/en-us/share ... -online:-P>> script для сайта.# This script requires the modules Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns, which can be installed with the cmdlet Install-Module below:
# Install-Module Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns -Scope CurrentUser -Repository PSGallery -Force
Connect-MgGraph -Scope "Application.Read.All", "AppRoleAssignment.ReadWrite.All"
$managedIdentityObjectId = "****" # 'Object (principal) ID' of the managed identity
$scopeName = "Sites.Selected"
$resourceAppPrincipalObj = Get-MgServicePrincipal -Filter "displayName eq 'Office 365 SharePoint Online'" # SPO
$targetAppPrincipalAppRole = $resourceAppPrincipalObj.AppRoles | ? Value -eq $scopeName

$appRoleAssignment = @{
"principalId" = $managedIdentityObjectId
"resourceId" = $resourceAppPrincipalObj.Id
"appRoleId" = $targetAppPrincipalAppRole.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -BodyParameter $appRoleAssignment | Format-List
< /code>
script для sites.fullcontrol.all < /p>
# This script requires the modules Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns, which can be installed with the cmdlet Install-Module below:
# Install-Module Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns -Scope CurrentUser -Repository PSGallery -Force
Connect-MgGraph -Scope "Application.Read.All", "AppRoleAssignment.ReadWrite.All"
$managedIdentityObjectId = "****" # 'Object (principal) ID' of the managed identity
$scopeName = "Sites.FullControl.All"
$resourceAppPrincipalObj = Get-MgServicePrincipal -Filter "displayName eq 'Office 365 SharePoint Online'" # SPO
$targetAppPrincipalAppRole = $resourceAppPrincipalObj.AppRoles | ? Value -eq $scopeName

$appRoleAssignment = @{
"principalId" = $managedIdentityObjectId
"resourceId" = $resourceAppPrincipalObj.Id
"appRoleId" = $targetAppPrincipalAppRole.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -BodyParameter $appRoleAssignment | Format-List
< /code>
и, наконец, < /p>
Connect-PnPOnline -Url "https://YOUR_SHAREPOINT_TENANT_PREFIX.sharepoint.com/sites/HR" -Interactive -ClientId "YOUR_PNP_APP_CLIENT_ID"
Grant-PnPAzureADAppSitePermission -AppId "***" -DisplayName "YOUR_FUNC_APP_NAME" -Permissions Manage
< /code>
Теперь вот код .net Core 8.0 для подключения к списку SharePoint:-< /p>
string accessToken = await GetJwtTokenUsingSystemManagedIdentity();

string siteUrl = "https://**.sharepoint.com/sites/HR";

string listName = "Call Transfer Log Data";

string tenant = "***";

string site = "analytics";

string listTitle = "Call Transfer";

siteUrl = $"https://{tenant}.sharepoint.com/sites/{site}";

string apiBaseUrl = $"{siteUrl}/_api/web/lists/GetByTitle('{listTitle}')/items";

var httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json;odata=verbose");

string filterDate = DateTime.UtcNow.AddDays(-120).ToString("yyyy-MM-ddTHH:mm:ssZ");

string requestUrl = $"{apiBaseUrl}?$filter=Modified ge datetime'{filterDate}'&$top=100&$orderby=Modified desc";

bool hasMore = true;

int page = 1;

List responseContent = new List();

while (hasMore)

{

Console.WriteLine($"Fetching page {page}...");

var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);

var response = await httpClient.SendAsync(request);

Console.WriteLine($"row response = " + response);

string content = await response.Content.ReadAsStringAsync();

using JsonDocument doc = JsonDocument.Parse(content);

var root = doc.RootElement.GetProperty("d");

Console.WriteLine($"Building Root {page}...");

// Process results

foreach (var item in root.GetProperty("results").EnumerateArray())

{ //code goes here

}

}

private static async Task GetJwtTokenUsingSystemManagedIdentity()

{

string resource = "https://***.sharepoint.com/.default";

var credential = new DefaultAzureCredential();

var tokenRequestContext = new TokenRequestContext(new[] { resource });

var token = await credential.GetTokenAsync(tokenRequestContext);

//Console.WriteLine("Toekn is " + token.Token)

; return token.Token;

}
< /code>
Теперь функция Azure должна работать каждый день в 4 и 6 утра UTC (). Где вчера в 11 часов вечера) я развернул функцию Azure и, чтобы проверить ее, я установил время выполнения в 11:15 вечера UTC (), и работал хорошо, он получил элементы от SharePoint. Затем я изменил функцию Azure, чтобы запустить в 4 и 6 утра UTC (). Но сегодня в 8 утра utc () Я проверил журналы и вызов SharePoint не удалось с этим исключением:-< /p>

row response = statuscode: 401, anasephrase: 'untauthorized', версия:
1.1, content: system.net.http.httpconnectionrespons. /> x-ms-diagnostics: 3001000; sound = "произошла ошибка
аутентификация запроса."; Category = "Invalid_Client" < /p>
< /blockquote>
Так что я сделал новое развертывание, чтобы проверить функцию Azure, и я заставил его запустить по 8:30. Развернуто, и я установил время выполнения в 9 часов утра UTC (), и я остановил функцию Azure после развертывания, и я запускаю ее снова. Теперь призыв к SharePoint добился успеха, следующим образом:-< /p>

rate response = statuscode: 200, anasephrase: 'ak, версия: 1.1,
Content: 200, Consephrase: System.net.http.httpconnectionResponsecontent, заголовки: < /p>
< /blockquote>
Так что же происходит? Причина, по которой мне нужно остановить/запустить функцию после каждого развертывания? или функция Azure через определенное количество времени, не сможет подключиться, используя управляемую личность, и понадобится новое развертывание или новый перезапуск? Пожалуйста, помогите по этому поводу?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/795 ... t-using-az
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»