如何将访问令牌从.NET(代码隐藏)传递给Javascript

我想通过.NET框架“授权”使用我自己的API密钥,秘密和刷新令牌,然后将访问令牌传递给JavaScript,这样我就可以使用进度指示器将video直接上传到YouTube。

我有通过.NET API工作的代码 ,可以直接上传到我的频道[未经授权],但你没有进度指示(可能需要一段时间),文件必须先上传到我的服务器,然后到YouTube服务器。

服务器端访问代码是否与客户端访问代码不同? 如果不:

  1. 如何获取访问代码服务器端? (得到字符串)
  2. ***如何通过JavaScript将其传递给Google API? (不是如何写但在哪里传入它?)

我很清楚暴露访问令牌的安全风险,但这些确实会过期吗? (作为奖励,我如何缩短过期时间)。 这也是在受密码保护的网页内完成的,您没有获得“客户端密码”或“刷新令牌”

***更新 – 我想我在MediaUploader对象中找到了传递令牌的MediaUploader

 var uploader = new MediaUploader({ baseUrl: 'https://www.googleapis.com/upload/youtube/v3/videos', file: selectedFile, token: token, // ***RIGHT HERE*** metadata: metadata, params: params, onError: function(data) { 

好的,经过几周的粉碎API,.NET和JavaScript文档,我已经构建了以下解决方案….

根据YouTube V3 Developer文档,您可以设置所有密钥。 (选择OAuth,Web应用程序,并为您的Javascript和Redirect代码输入URI)

接下来使用OAuth Playground获取刷新代码

一旦你有了client_id,client_secret和refresh_token,你就可以摇滚!

此代码通过后面的代码进行简单的HTTP / REST调用,以获得一个有效期为3600秒的access_token(默认值)。 然后它将此字符串传递给JavaScript代码以供使用****警告****

使用任何.NET或JavaScript库,只有一个文件, GitHub上可用的cors_upload.js

Allas,代码
Default.aspx的

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ApisCallTest.WebForm1" %>     YouTube API Uploads via CORS    

% done (/ bytes)

By uploading a video, you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at http://www.youtube.com/t/terms

和Default.aspx.cs

 using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Newtonsoft.Json.Linq; namespace ApisCallTest { public partial class WebForm1 : System.Web.UI.Page { private static readonly HttpClient client = new HttpClient(); public string access_token; protected void Page_Load(object sender, EventArgs e) { var values = new Dictionary { { "client_id", "REPLACE_ME" }, { "client_secret", "REPLACE_ME" }, { "refresh_token", "REPLACE_ME" }, { "grant_type", "refresh_token" } }; var content = new FormUrlEncodedContent(values); var response = client.PostAsync("https://www.googleapis.com/oauth2/v4/token", content); string json = response.Result.Content.ReadAsStringAsync().Result; dynamic obj = JObject.Parse(json); access_token = obj.access_token; } } } 

结果……从受密码保护的网页,我可以让用户将video上传到我的频道,不公开,并存储videoID,以便稍后将该video嵌入我的网站。

对于****警告****,这是一个安全问题,因为您(非常直接地)将您的个人访问密钥暴露给“公共”。 它只持续1小时,但是给“任何人”使用的任何“范围”访问权限。尝试在某种程度上破坏密钥是个好主意,至少,不要公开这样做可用页面。