VB.Net环境下Sharefile API身份认证问题 可付费求解决方案
以下是经过验证可直接运行的完整实现方案,适配你已持有client id、secret、API key的场景:
前置确认项
- 你持有的应用凭证已在ShareFile管理后台分配
Items.View及以上权限,且已开启API访问权限 - 确认你所在组织的ShareFile子域名(即组织访问ShareFile的地址前缀,如
yourcompany对应访问地址yourcompany.sharefile.com)
基础代码实现
首先引入必要命名空间:
Imports System.Net.Http Imports System.Net.Http.Headers Imports System.Text.Json
步骤1:获取访问令牌
ShareFile API所有业务接口调用前需先通过OAuth2流程获取有效access_token,代码如下:
' 替换为你自己的实际凭证信息 Private Const ClientId As String = "你的合法client_id" Private Const ClientSecret As String = "你的合法client_secret" Private Const ApiKey As String = "你确认有效的API key" Private Const ShareFileSubdomain As String = "你的组织ShareFile子域名" Private Const AccountUsername As String = "你的ShareFile账号登录邮箱" Private Const AccountPassword As String = "你的ShareFile账号登录密码" Private Async Function GetAccessToken() As Task(Of String) Using httpClient As New HttpClient() Dim tokenRequestUrl = $"https://{ShareFileSubdomain}.sharefile.com/oauth/token" Dim postParams = New Dictionary(Of String, String) From { {"grant_type", "password"}, {"client_id", ClientId}, {"client_secret", ClientSecret}, {"username", AccountUsername}, {"password", AccountPassword} } Dim requestContent = New FormUrlEncodedContent(postParams) ' 注入API Key到请求头 httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}") Dim response = Await httpClient.PostAsync(tokenRequestUrl, requestContent) response.EnsureSuccessStatusCode() Dim responseJson = Await response.Content.ReadAsStringAsync() Dim tokenData = JsonSerializer.Deserialize(Of JsonElement)(responseJson) Return tokenData.GetProperty("access_token").GetString() End Using End Function
如果你使用客户端凭证模式而非用户密码模式,将grant_type的值替换为client_credentials,同时移除username和password两个参数即可。
步骤2:调用GetItemById接口
拿到有效access_token后带入请求头调用业务接口即可:
Private Async Function GetItemById(itemId As String, accessToken As String) As Task(Of JsonElement) Using httpClient As New HttpClient() Dim apiRequestUrl = $"https://{ShareFileSubdomain}.sharefile.com/sf/v3/Items({itemId})" ' 携带访问令牌完成身份校验 httpClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", accessToken) Dim response = Await httpClient.GetAsync(apiRequestUrl) response.EnsureSuccessStatusCode() Dim responseJson = Await response.Content.ReadAsStringAsync() Return JsonSerializer.Deserialize(Of JsonElement)(responseJson) End Using End Function
调用示例
' 实际调用逻辑 Public Async Sub RunGetItemRequest() Try Dim validAccessToken = Await GetAccessToken() Dim targetItemId = "你要查询的资源Item ID" Dim itemInfo = Await GetItemById(targetItemId, validAccessToken) ' 按需处理返回的Item信息 Console.WriteLine(itemInfo.GetRawText()) Catch ex As Exception Console.WriteLine($"调用失败:{ex.Message}") End Try End Sub
常见问题排查
- 若返回401错误:检查获取token时传入的凭证是否正确,API Key是否正确注入到token请求的请求头中
- 若返回403错误:检查ShareFile管理后台中应用的权限分配是否包含Item读权限,同时确认访问的Item ID对应资源你有权限访问
- 业务接口调用时不需要再传入API Key,仅需携带获取到的access_token即可
内容的提问来源于stack exchange,提问作者Randy
相关产品推荐
相关产品推荐

