2014-03-06 52 views
1

我有一个C#桌面应用程序,它将文件上传到, 它需要一个Refresh令牌来生成访问令牌,但我无法以编程方式创建Refresh令牌。从This site创建Refresh令牌,并成功将文件上传到Box,但此刷新标记在几分钟后过期,并引发异常Refresh token has expired。我正在使用box-csharp-sdk-v2如何获取框的刷新令牌

所以我想用我的客户详细信息或API密钥programaticaly

回答

4

为了与框的OAuth2令牌努力创造一个刷新令牌,你需要使用的API密钥和密码来实例化一个TokenProvider您应用:

// Instantiate a token provider. 
var tokenProvider = new TokenProvider("apiKey", "apiSecret"); 

通过的OAuth2流程向用户发送后,您会收到一个授权code。该TokenProvider可以使用这个code来获取第一访问/刷新标记对:

// Fetch the initial access/refresh token pair 
// You will want to persist these new values for later use. 
var initialTokenPair = tokenProvider.GetAccessToken("code") 

每当一个新的Refresh令牌给你刷新Access令牌。 Refresh令牌在使用时或过了60天后,以先到者为准过期。

// Refresh the token pair. 
// You will want to persist these new values for later use. 
var newTokenPair = tokenProvider.RefreshAccessToken("refreshToken"); 

我更新了箱CSHARP-SDK-V2readme与上述示例。我很抱歉,在此之前这个问题还没有明确说明!

编辑:添加了获取初始标记对的示例。

+2

谢谢您的回答,当我到了刷新令牌,我能够生成访问令牌,并保存以供将来使用,以及与此访问令牌我我能够上传文件,但我怎样才能以编程方式首次生成刷新令牌? – Sumeshk

+1

当我上传一个文件到框中,并在下次删除它时,上传的文件将只显示在垃圾文件夹中,我试着用不同的文件夹名和文件名 – Sumeshk

+1

*我如何以编程方式第一次生成刷新标记?添加了一个使用Box提供的OAuth2授权“代码”获取初始令牌对的示例。 –

0

使用此代码

/*******************/ 
/** Authorization **/ 
/*******************/ 

// Create a OAuth2 access/refresh token provider using your API key/secret. 
var tokenProvider = new TokenProvider("apiKey", "apiSecret"); 

// Fetch the initial token pair using the OAuth2 authorization code... 
// You will want to persist these new values for later use. 
var initialTokenPair = tokenProvider.GetAccessToken("code"); 

// You can also refresh the token pair. 
// You will want to persist these new values for later use. 
var newTokenPair = tokenProvider.RefreshAccessToken("refreshToken"); 

/*********************/ 
/** Box Interaction **/ 
/*********************/ 

// Instantiate a BoxManager client. 
var boxManager = new BoxManager(newTokenPair.AccessToken); 

// Create a new file in the root folder 
boxManager.CreateFile(Folder.Root, "a new file.txt", Encoding.UTF8.GetBytes("hello, world!")); 

// Fetch the root folder 
var folder = boxManager.GetFolder(Folder.Root); 

// Find a 'mini' representation of the created file among the root folder's contents 
var file = folder.Files.Single(f => f.Name.Equals("a new file.txt")); 

// Get the file with all properties populated. 
file = boxManager.Get(file); 

// Rename the file 
file = boxManager.Rename(file, "the new name.txt"); 

// Create a new subfolder 
var subfolder = boxManager.CreateFolder(Folder.Root, "my subfolder"); 

// Move the file to the subfolder 
file = boxManager.Move(file, subfolder); 

// Write some content to the file 
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("goodbye, world!"))) 
{ 
    file = boxManager.Write(file, stream); 
} 

// Read the contents to a stream and write them to the console 
using (var stream = new MemoryStream()) 
{ 
    boxManager.Read(file, stream); 
    using (var reader = new StreamReader(stream)) 
    { 
     stream.Position = 0; 
     Console.Out.WriteLine("File content: '{0}'", reader.ReadToEnd()); 
    } 
} 

// Delete the folder and its contents 
boxManager.Delete(subfolder, recursive: true); 

As an enterprise administrator you can create a client and perform Box operations on behalf of another user. 

// Instantiate a BoxManager client. 
var boxManager = new BoxManager("AccessToken", onBehalfOf: "[email protected]"); 

// ... do stuff as that user 
// ... use your power only for awesome! 

Github