在使用类似微博的开放API的时候,会涉及到授权的问题,就拿微博来说,当用户在你的应用中需要调用微博API来处理一些事情时,你首先要让用户登录微博,得到用户授权后,才能调用微博API。

授权通常通过一个web页面来完成,比如打开微博的登录页。估计很多人首先会想到用 WebView 控件来显示登录页,然后让用户登录,当授权后跳转时,从RUI中获取授权码。

其实,根本不用这么麻烦,RT API本身就有Web授权的API,只要准备好授权页的地址和回调地址,简单调用一下API,系统会自动打开一个窗口,让用户授权,授权完后直接从API的返回内容查找授权码。

有了授权码,你就可以用来换Access Token了,换了Access Token后就可以调用微博API了。

到底简单到什么程度呢,咱们试试就知道了。我以新浪微博的开放平台为例。首先你得去开放平台的后台管理中新建一个应用,就可以得到一个 App Key,然后就可以编程了。

先看XAML布局的界面。

        <StackPanel Margin="15">
<TextBox Name="txtClientID" Header="client_id" PlaceholderText="你的应用的App Key"/>
<TextBox Name="txtCallbackUri" Margin="0,13,0,16" Header="redirect_uri" Text="https://api.weibo.com/oauth2/default.html"/> <Button Content="授权" Width="300" Margin="25,2,0,20" Click="OnClick"/> <TextBlock Name="tbmsg" Foreground="Red" FontSize="18" TextWrapping="Wrap"/>
</StackPanel>

两个TextBox是用来输入app key和回调URI的。

然后直接上代码,简直TMD轻松。

            // 你的应用的App key
string clientID = txtClientID.Text; // 你在开放平台上填写的回调URI
string cbUri = txtCallbackUri.Text;
Uri callbackUri = new Uri(cbUri); // 新浪微博授权地址
string wbauthUriStr = $"https://api.weibo.com/oauth2/authorize?client_id={clientID}&response_type=code&redirect_uri={cbUri}"; Uri wbAuthUri = new Uri(wbauthUriStr); // 获取授权
WebAuthenticationResult result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, wbAuthUri, callbackUri); // 处理结果
if (result.ResponseStatus == WebAuthenticationStatus.Success)
{
string cburi = result.ResponseData;
// 取得授权码
// code是附加在回调URI后,以?code=xxxxxxxxxxxxxx的形式出现,作为URI的查询字符串
string code = cburi.Substring(cburi.IndexOf('=') + ); tbmsg.Text = $"回调URI:{cburi}\n授权码:{code}";
}
else if (result.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
{
tbmsg.Text = "错误:" + result.ResponseErrorDetail.ToString();
}
else if (result.ResponseStatus == WebAuthenticationStatus.UserCancel)
{
tbmsg.Text = "你取消了操作。";
}

代码虽有N行,但不复杂,我简单解释一下,看不懂的请撞墙。

新浪微博的授权URI为https://api.weibo.com/oauth2/authorize?client_id=你的AppKey&response_type=code&redirect_uri=你设置的回调URI

对于我们这种基于客户端的应用,回调URI多余,可是它有要求,你可以随便填,不过,新浪官方准备了一个空白的RUI,你可以用它作为回调用:https://api.weibo.com/oauth2/default.html

授权时,直接调用WebAuthenticationBroker类的AuthenticateAsync方法,方法是静态的,直接可以调用。注意参数,这里,WebAuthenticationOptions一定要设为None,这样当授权完后可以获得完整的回调URI,才能得到授权码。

AuthenticateAsync方法会返回一个WebAuthenticationResult对象,访问该对象的ResponseData属性,你就能获取到回调的URI,并包含?code=xxxxxxxxxx。这样就可以把code拿出来了。

            if (result.ResponseStatus == WebAuthenticationStatus.Success)
{
string cburi = result.ResponseData;
// 取得授权码
// code是附加在回调URI后,以?code=xxxxxxxxxxxxxx的形式出现,作为URI的查询字符串
string code = cburi.Substring(cburi.IndexOf('=') + ); tbmsg.Text = $"回调URI:{cburi}\n授权码:{code}";
}

对,就这么简单,完成了。不信?试试看。

1、运行程序,点击按钮,开始授权。

2、登入后,点授权。

3、授权完后,刚才弹出的窗口自动关闭。

Nice,大功告成。

示例源代码下载

【Win 10 应用开发】Web授权示例:获取新浪微博的授权码的更多相关文章

  1. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  2. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  3. 【Win 10应用开发】延迟共享

    延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...

  4. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  5. 【Win 10 应用开发】Toast通知激活应用——前台&后台

    老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...

  6. 【Win 10 应用开发】在代码中加载文本资源

    记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...

  7. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  8. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  9. 【Win 10 应用开发】MIDI 音乐合成——音符消息篇

    在上一篇中,老周介绍了一些乐理知识,有了那些常识后,进行 MIDI 编程就简单得多了.尽管微软已经把 API 封装好,用起来也很简单,但是,如果你没有相应的音乐知识基础,你是无法进行 MIDI 编程的 ...

随机推荐

  1. 【流量劫持】躲避 HSTS 的 HTTPS 劫持

    前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...

  2. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman

    美国时间 6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开,美国时间6.9 是第三天, Scott Hanselman 做Keynote.今天主题围绕的是.NET ...

  3. Node-Webkit打包

    1.node-webkit是什么? NW.js is an app runtime based on Chromium and node.js. You can write native apps i ...

  4. 认识 Azure

    本文为官网摘录总结

  5. 记录我这一年的技术之路(nodejs纯干货)

    2015年12月28日23:19:54 更新koa应用.学习型网站和开发者工具等 coding伊始 开始认认真真的学习技术还是2015.10.21日开始的,记得很清楚,那天,是我在龙湖正式学习的第一天 ...

  6. jsp页面无法识别el表达式的解决方案

    今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...

  7. ASP.NET Core 中文文档 第五章 测试(5.2)集成测试

    原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...

  8. C++ 事件驱动型银行排队模拟

    最近重拾之前半途而废的C++,恰好看到了<C++ 实现银行排队服务模拟>,但是没有实验楼的会员,看不到具体的实现,正好用来作为练习. 模拟的是银行的排队叫号系统,所有顾客以先来后到的顺序在 ...

  9. C# Entity Framework并发处理

    原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...

  10. SQL SERVER导入数据到ORACLE的方法总结

    我们偶尔会有将数据从SQL SERVER导入到ORACLE当中的这种需求,那么这种跨数据库导数有那些方法呢?这些方法又有那些利弊呢? 下面比较肤浅的总结了一些可行的方法. 1:生成SQL脚本然后去OR ...