以yahoo为例吧,即从yahoo取得用户信息,存到自己的站点,实现了用户信息在一次录入多处共享的功能。
以下是在点击了使用yahoo登录本站的链接后执行action:OpenId.
ProviderUrl="http://yahoo.com"
Action OpenId会被执行两次,一次是自己的站点请求的,此时response==null;一次是yahoo请求的,response!=null. using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
using DotNetOpenAuth.OpenId.Provider;
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.Messaging; static private readonly OpenIdRelyingParty Openid = new OpenIdRelyingParty();//一个重要的类
public ActionResult OpenId(string ProviderUrl)
{
FormsAuthentication auth = new FormsAuthentication();
var response = Openid.GetResponse();
if (response == null)//自己站点的请求
{
Identifier id;
if (Identifier.TryParse(ProviderUrl, out id))//第三方网站地址能产生一个有效标识符时
{
var request = Openid.CreateRequest(id);
var fetch = new FetchRequest();//定义在这次请求中都想要获取到用户的哪些信息
fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
request.AddExtension(fetch);
return request.RedirectingResponse.AsActionResult();//页面跳转到了yahoo
}
return RedirectToAction("Index");
}
switch (response.Status)//yahoo登录后,返回到自己的站点时,根据不用的response status来做不同的处理
{
case AuthenticationStatus.Authenticated:
var fetch = response.GetExtension<FetchResponse>();
string firstName = string.Empty;
string lastName = string.Empty;
string email = string.Empty;
if (fetch != null)
{
firstName = fetch.GetAttributeValue(WellKnownAttributes.Name.First);
lastName = fetch.GetAttributeValue(WellKnownAttributes.Name.Last);
email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
}            return CreateUser(response.ClaimedIdentifier, firstName, lastName, email);//可以将用户的信息存入到自己的数据库 case AuthenticationStatus.Failed:
return RedirectToAction("Index"); default:
return RedirectToAction("Index"); }
}

dotNetOpenAuth也可以实现sso,只是觉得晦涩难懂。比如:

<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS
xmlns:xrds="xri://$xrds"
xmlns:openid="http://openid.net/xmlns/1.0"
xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="">
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<Type>http://openid.net/extensions/sreg/1.1</Type>
<URI>@uri1</URI>
</Service>
<Service priority="">
<Type>http://openid.net/signon/1.0</Type>
<Type>http://openid.net/extensions/sreg/1.1</Type>
<URI>@uri2</URI>
</Service>
</XRD>
</xrds:XRDS>

这里边具体都是做什么用呢,也找不到资料,觉得用dotnetopenauth实现sso可能有点自找麻烦的感觉。有对这块熟悉的吗?

mvc中DotNetOpenAuth实现了第三方应用访问自己的网站的更多相关文章

  1. ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

    使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也 ...

  2. ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理

    话说来到上海已经快半年了,时光如白驹过隙,稍微不注意,时间就溜走了,倒是没有那么忙碌,闲暇之际来博客园还是比较多的,记得上次在逛博问的时候看到有同志在问MVC中Cookie过期后如何作相关处理,他在阐 ...

  3. [Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

    目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net M ...

  4. Asp.Net MVC 中实现跨域访问

    在ASP.Net webapi中可以使用  Microsoft.AspNet.WebApi.Cors  来实现: public static class WebApiConfig { public s ...

  5. 在Asp.net MVC中访问静态页面

    有时候由于一些特殊的需要,我们需要在MVC中访问HTML页面,假如您将这个页面放在Views中的话,去访问将会收到一个404,但是放在Views外面的目录则不受此限制. 那么我们就来解决View里面的 ...

  6. 解决asp.net mvc中*.resx资源文件访问报错

    个人笔记 问题重现 在asp.net mvc中,使用资源文件会出现一个问题,例如: 紧接着我进入视图界面,输入下面代码: <a href="javascript:void(0);&qu ...

  7. mvc做网站怎么在mvc中直接访问.html网页 [问题点数:20分]

    最近用.net mvc做一个网站 我想在mvc中直接访问一个 .html页面 怎么设置一下啊 现在直接访问是404不让访问的 放到view文件夹外面...

  8. C# MVC 中自定义权限特性[Authorize]中对于Ajax访问的处理

    在MVC中定义自己的权限特性. 下例中是简单的登录判断,登录信息存与Session中,如果Session中没有登录信息,那么就不通过. 在处理无权限的时候,判断当前请求是否为Ajax请求,如果是Aja ...

  9. 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证

    背景 创建需要通过Windows用户进行身份认证的Asp.net MVC应用 要点 在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被 ...

随机推荐

  1. Spring学习笔记①

    我觉得Spring之所以发展的好,主要是理论研究与实践是并轨的,能跟得上时代的步伐,尤其是基础理论的研究(可能是最近看三体看多了,对基础理论非常崇拜).微服务的实现啊,RESTful的实现,对应的Sp ...

  2. win10如何合并硬盘分区

    好多人都会讲电脑硬盘分成几个不同的区,以方便自己的资料的存储和查找,但不少人不知道如何合并已经分出的硬盘分区.以下是我的经验,与大家分享: 1.   首先,右击“此电脑”,在弹出来的右键菜单这种选择“ ...

  3. 1647: [Usaco2007 Open]Fliptile 翻格子游戏

    1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 423  Solved: 173[ ...

  4. Archlinux中卸载 Slim

    Slim 是图形登录器.最近停止更新了,据说在systemd中有兼容性问题. 卸载Slim的原因是某计算机使用的是AMD显卡的Catalyst驱动,图形驱动一旦出问题,Slim就无法启动,给维护造成困 ...

  5. webots自学笔记(四)传感器API使用、查看官方文档

           原创文章,来自“博客园,_阿龙clliu” http://www.cnblogs.com/clliu/,转载请注明原文章出处.           不能说webots的学习资料少,只能说 ...

  6. Centos 搭建LAMP环境

    1.安装Apache yum install httpd 相关命令: systemctl start httpd.service #启动apache systemctl stop httpd.serv ...

  7. CoreAnimation 目录

    CoreAnimation 目录 CoreAnimation 开篇 CoreAnimation 寄宿图 CoreAnimation 图层几何学 CoreAnimation 视觉效果

  8. (9)集合之Set,HashSet,TreeSet

    TreeSet子类 注意事项: 1.向TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储 2.往TreeSet添加元素的时候,如果元素本身不具备自 ...

  9. cuda编程学习3——VectorSum

    这个程序是把两个向量相加 add<<<N,1>>>(dev_a,dev_b,dev_c);//<N,1>,第一个参数N代表block的数量,第二个参数1 ...

  10. EF批量插入(转)

    原作者地址http://blog.csdn.net/zlts000/article/details/46385773 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramew ...