03-23-2023 12:23 PM
I have limited Alfresco knowledge but a lot of Opentext Content Server experience so in the main in Alfresco Content Services things feel familiar.
I installed Alfresco Content Services (ACS) using the instructions found here which allows for a quick start and should take no more than 30 minutes or so
I was interested in getting a feel for the REST services but found one aspect a little confusing - the acquisition of a valid TICKET. It seems that this should be obtained using the Authentication API - In powershell this looks as follows and works well so all good:
function Get-AlfrescoAuthToken { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$BaseUrl, [Parameter(Mandatory=$true)] [string]$UserId, [Parameter(Mandatory=$true)] [SecureString]$Password ) $url = "$BaseUrl/alfresco/api/-default-/public/authentication/versions/1/tickets" $body = @{ userId = $UserId password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) } | ConvertTo-Json try { $response = Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType 'application/json' return $response.entry.id } catch { Write-Error $_.Exception.Message } } $password = ConvertTo-SecureString '<INSERT_YOUR_PASSWORD>' -AsPlainText -Force $token = Get-AlfrescoAuthToken -BaseUrl 'http://192.168.56.100' -UserId '<INSERT_YOUR_USER_ID>' -Password $password Write-Host "Authentication token: $token"
What I wasn't able to successfully do however was to use this ticket in subsequent calls although surprisingly I am able to authenticate in Powershell using the following code:
$username = "INSERT_USERNAME" $password = "INSERT_PASSWORD" $alfrescoUrl = "http://192.168.56.100/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children?skipCount=0&maxItems=100" $basicAuth = "{0}:{1}" -f $username,$password $basicAuthEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($basicAuth)) $headers = @{ "Authorization" = "Basic $basicAuthEncoded" } # actually make the call $response = Invoke-RestMethod -Uri $alfrescoUrl -Headers $headers -Method Get $response.list.entries.entry | Format-Table -Property name, id, isFolder, isFile, createdAt, createdByUser, modifiedAt, modifiedByUser
Can anyone provide an explanation please - perhaps the latter method is acceptable but equally perhaps I have misunderstood things ?
Many thanks in advance,
(Powershell version 5.1 used in examples)
03-24-2023 04:22 AM
Answered my own question........
Lesson being - read the documentation !!
NOTE: Once the ticket has been obtained it is necessary to base64 encode it !!!!
Here is the complete working example using Powershell 5.1:
function Get-AlfrescoAuthToken { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$BaseUrl, [Parameter(Mandatory=$true)] [string]$UserId, [Parameter(Mandatory=$true)] [SecureString]$Password ) $url = "$BaseUrl/alfresco/api/-default-/public/authentication/versions/1/tickets" $body = @{ userId = $UserId password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) } | ConvertTo-Json try { $response = Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType 'application/json' # need to base64 encode !! $encodedTicket = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($response.entry.id)) return $encodedTicket } catch { Write-Error $_.Exception.Message } } Clear-Host if($PSVersionTable.PSVersion.Major -ge 5 -and $PSVersionTable.PSVersion.Minor -ge 1) { Write-Host "PowerShell version is 5.1 or higher." } else { Write-Host "PowerShell version is lower than 5.1. Please upgrade to a higher version." } $baseUrl = 'http://192.168.56.100' $password = ConvertTo-SecureString '<INSERT_YOUR_PASSWORD_HERE>' -AsPlainText -Force $basicAuthEncoded = Get-AlfrescoAuthToken -BaseUrl $baseUrl -UserId 'admin' -Password $password Write-Host "Authentication token: $basicAuthEncoded" ############################################################################# # Lets actually try and retrieve something using the Base64 encoded ticket ! ############################################################################# $nodeUrl = "$baseUrl/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children?skipCount=0&maxItems=100" $headers = @{ "Authorization" = "Basic $basicAuthEncoded" } $response = Invoke-RestMethod -Uri $nodeUrl -Method Get -Headers $headers # Process the response as needed $response.list.entries.entry | Format-Table
03-24-2023 04:22 AM
Answered my own question........
Lesson being - read the documentation !!
NOTE: Once the ticket has been obtained it is necessary to base64 encode it !!!!
Here is the complete working example using Powershell 5.1:
function Get-AlfrescoAuthToken { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$BaseUrl, [Parameter(Mandatory=$true)] [string]$UserId, [Parameter(Mandatory=$true)] [SecureString]$Password ) $url = "$BaseUrl/alfresco/api/-default-/public/authentication/versions/1/tickets" $body = @{ userId = $UserId password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) } | ConvertTo-Json try { $response = Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType 'application/json' # need to base64 encode !! $encodedTicket = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($response.entry.id)) return $encodedTicket } catch { Write-Error $_.Exception.Message } } Clear-Host if($PSVersionTable.PSVersion.Major -ge 5 -and $PSVersionTable.PSVersion.Minor -ge 1) { Write-Host "PowerShell version is 5.1 or higher." } else { Write-Host "PowerShell version is lower than 5.1. Please upgrade to a higher version." } $baseUrl = 'http://192.168.56.100' $password = ConvertTo-SecureString '<INSERT_YOUR_PASSWORD_HERE>' -AsPlainText -Force $basicAuthEncoded = Get-AlfrescoAuthToken -BaseUrl $baseUrl -UserId 'admin' -Password $password Write-Host "Authentication token: $basicAuthEncoded" ############################################################################# # Lets actually try and retrieve something using the Base64 encoded ticket ! ############################################################################# $nodeUrl = "$baseUrl/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children?skipCount=0&maxItems=100" $headers = @{ "Authorization" = "Basic $basicAuthEncoded" } $response = Invoke-RestMethod -Uri $nodeUrl -Method Get -Headers $headers # Process the response as needed $response.list.entries.entry | Format-Table
Explore our Alfresco products with the links below. Use labels to filter content by product module.