У меня есть функция 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
Надежный способ аутентификации вашей функции Azure против списка SharePoint, используя управляемую функцию Azure ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение