Archive for February, 2006

Web2.0 , SSO & OpenID

Web2.0的应用越来越多,对SSO的需求也就愈发强烈,Delicious,Flickr,Mail,Blog,43things, Feedburner……,每个应用都有自己的一套Identit需要维护,这带来了很多问题,比如:

每个应用都需要注册一个用户名和密码
每天需要输入很多次同样的认证信息
可能无法注册到自己希望的用户名

如果这些Web2.0应用能够采用某种Single Sign-On系统,会带来很多好处:

简化Web2.0的开发,不需要开发Identity认证,只需要集成SSO的SDK
用户只需要记住一个简单的Identity就可以
统一认证,方便集成各种Web2.0的应用

BTW:这里需要分清Authentication与Authorization的区别:SSO负责的仅仅是Authentication - is proving that You Are Who You Say You Are,Authorization则是某个Identity在这个应用系统中有什么数据,这是Web2.0网站自己的事儿。
最先想到的是Microsoft Passport,它的基本工作原理是:
1) 客户端对Passport合作站点(比如MSN Space)发出访问请求,检查Cookie是否有Passport登陆验证的Cookie,如果没有,则显示"登陆"按钮;
2) 点击登陆按钮,Redirect -> Passport.com 进行验证,参数:

returnUrl - 返回到应用的URL
SiteID - 合作站点的ID

3) Passport检查客户端Cookie,如果用户未登陆(用户有可能在其它的Passport-Enable站点登陆过),则显示登陆页面;如果登陆过,则更新Cookie,到(5);
4) 用户提交登陆数据(用户名、密码,有时还图像验证等),HTTPS发送;
5) Passport验证用户身份,生成sid,重定向回刚才传递的那个returnUrl,也就是Passport的应用站点。
6) Passport合作站点通过预先约定验证SID,并生成本地Cookie,显示"登出"按钮。
其实,类似的SSO方案还有很多,有跨网站应用的,比如Sixapart的Typekey;也有本公司的Passport,比如Sohu Passport(Sohu Passport的认证页面是通过HTTP明文传的…),还有为了其它应用集成的,比如Flickr API中的认证。
这种SSO解决方案中最重要的三个元素为:

SiteID - 标识哪个合作应用站点
ReturnURL - 要返回的页面
SID - 预先约定的某种认证方式。比如对称密钥加密,或者PKI公钥技术

这种解决方案,所有的用户隐私资料都是保存在中心服务器中的。这就带来了一个问题,由谁来替大家Host用户的隐私数据呢?如果是某个中心化的Server,谁能相信这个Server呢?
Livejournal的创始人给出了他的答案 - OpenID。

This is a decentralized identity system, but one that’s actually decentralized and doesn’t […]

Popularity: 71%

Dissect Spam Karma

Spam Karma是一个非常棒的WP插件,用来过滤WP的留言中的Spam。用过WP的朋友或多或少的都受到过Spam疯狂的攻击,SK可以很大程度上的帮助你从这种困境中解脱出来。
Karma [’ka:ma] - 卡马(镍铬丝精密级),是一种度量单位。SK中,用Karma来表示一个留言的"Spam等级",最后根据一个留言的Karma值来判定这个留言是不是Spam。
Update:Ben提醒Karma的另一个意思是佛教中的”因果报应”,也许,这个意思更符合作者的本意。
SK本身是一个WP的插件,而为了有更好的扩展性,SK2也是采用插件的形式来工作的。当然,它的插件工作比起WP的机制来说,简单很多。
Plugin Framework大概有几种模式:
一种如Eclipse那样,采用"微内核+插件"。除了一个微小的核(包括Plugin Framework)之外,其它任何东西都是插件。这就需要尽可能的多留出扩展点,每个插件在做的时候要时刻考虑别人可能从哪个地方来扩展。
一种如Firefox、WordPress这样,主程序相对独立,在独立Standalone程序的基础上,暴露出一些接口,这种扩展性也非常强,当然,这是建立在StandAlone程序暴露出了足够丰富的扩展点的基础上。
这两种都有非常丰富的扩展性,比较适合做大型的Framework,比如Eclipse RCP等等。另外,这两种模式中往往都有"Extension Point"的概念。
另一种方式就简单多了,系统规定好几个Interface,插件只需要实现这几个Interface即可。这样的插件Framework,实现起来比较简单,但是扩展性也非常有限,比较适合做比较专用的小型程序。这种插件的核心概念就是"Interface"。
SK2就是一个这样的例子。
先来看看SK扩展WP的部分:
SK Extend了以下几个Extension:
<?php
add_action(’comment_form’, ’sk2_form_insert’);
add_action(’admin_menu’, ’sk2_add_options’);
add_action(’admin_head’, ’sk2_output_admin_css’);
add_filter(’pre_comment_approved’, ’sk2_fix_approved’);
add_action(’comment_post’, ’sk2_filter_comment’);
 
add_action(’wp_footer’, ’sk2_insert_footer’, 3);
?>
其中,"admin_menu"是用来在菜单中添加一个Option选项,"admin_head"是在Head中添加SK自己的CSS信息,"wp_footer"是在Blog的尾部添加一个SK的Copyright信息。
其余的三个就比较重要了
Extend "comment_form" Extension的是函数"sk2_form_insert",顾名思义,是在Comment Form Load的时候添加代码。
"pre_comment_approved"是一个Trick,防止WP自动发送Comment Notification。
"comment_post"是最重要的一个扩展点,它是在一条Comment被提交之后来调用的,SK的处理也正在此处。
再来看看SK2插件,前面说过它是属于比较简单的第三种形式,看看它的Interface是怎么定义的:
这个类中有三个核心的接口函数分别是
<?php
    function filter_this(&$cmt_object)
    { // override this to do your own filtering
        log_msg (__("Default filter (no action) called for plugin: ", ’sk2′) . $name, 3, $cmt_object->ID);
    }
   
    function treat_this(&$cmt_object)
  […]

Popularity: 36%

coComment Preview

一直希望有一个很好的Comments解决方案,帮我解决以下几个问题:

帮我追踪我所有的留言,记录这些留言的痕迹;
更进一步的追踪这些留言的Post,来看看Blog的主人对我的留言有什么反馈。

有一段曾经用Trackback来解决问题,这样做的结果是只有长篇大论才被记住,很多一两句的留言就不自觉地放弃了,反正也无法跟踪反馈 :P。久而久之,积极性越来越低,已经很少留言了。
Herock曾经建议采用社会化书签来对留言进行统一管理,可是关键在于,Bookmark下这些URL只是一些静态的信息,留言的组织和追踪还是靠你自己,还是很麻烦。
这两天偶尔看到coComment这个服务,看起来能够帮我解决我所面临的问题,就想试试。昨晚留下了Email,没想到一早就收到了invitation code。
用起来说简单也简单,说复杂也复杂,需要你在Browser中添加一个Bookmarklet,在点击留言提交的按钮前,点击这个Bookmarklet,然后点击的时候就同时把留言提交到coComment去了。
简单看了一下它的Bookmarklet代码,发现它是根据各种Blog系统的特征找到Comments的Form,然后在这个Form的提交Button后面添加一个个人信息的Logo,然后在修改Form的提交部分,让留言同时提交到coComments去。
看了一下代码,现在支持的Blog系统包括:
xanga.com
myspace.com
msn.com
blogger.com
typepad
blogs.com
wordpress.com
kaywa.com
这种做法够Hack的,不过想想也没办法。本来最好的办法是弄一个标准,然后大家都按照这个标准把留言Ping到某一个服务,不过,这似乎是不可能的,于是,就Hack这个提交的Form了。
不过,这种太过Geek的做法能够被普通用户所接纳么?我很担心。
最后的Conversation组织的不错,Fancy,而且也提供RSS来让我追踪我留言的各条Post,目前还没有收到更新,只能看看再说了,呵呵。对了,还提供Share的功能,把自己的留言Share出来。
还有,就是要提两个意见:

能不能做的更彻底一点儿,点击这个Bookmarklet的时候能自动帮我填留言的Form呢?我指的当然是Name,Blog这些信息,可以把它存在coComments的帐户里面。
把针对各种Blog系统的模版尽量抽象,然后提供一个可以方便扩充的Plugin机制(或者叫做Provider,Add-on),毕竟,coComments根本没精力提供所有系统的Comments模版,可以把这些工作留给社区来做,比如,吉子就可以做一个针对Sohu Blog的,嘿嘿。

Update:

简单测试了一下,发现coComment只能追踪同样是通过coComments服务的留言,不爽,不过也没有太好的办法,除非各家都提供自己的Comments RSS;
昨天用的时候就像可以写一个GreaseMonkey的脚本,来自动干这件事儿,结果这不,今儿就有了,这下更方便了;
还有一点想说的就是,这个服务的一个让我用的原因就是他不会让你失去什么,你的留言只是拷贝了一份在他那儿,所以,得到的就算是赚得吧。

Popularity: 57%

Popularity: 57%

IE7 Beta2 Preview

距离上次装Beta1已经有半年的时间了,这半年,用IE的时间大大的增加,不舍Firefox的主要原因是开放的架构和丰富的插件。
昨晚装上了IE7 Beta2试了试(这回也是英文版,不过不需要像上次那样Hack了:P),注意到一些细小的地方,比如:

上次的CSS Fixed的问题得到了解决;
Tab上的Close按钮(据说这是得到了Blog中的反馈而加上的功能);
Alt键开/关菜单;
Quick Tabs预览,这个太Cool了(估计Firefox会很快出来类似的插件吧);
"Delete Browse History"(虽然是已有功能的汇总,不过这个功能应该会有很多人需要);
Full Screen的处理非常好,比Firefox的处理更加方便和人性化;
Search Engine中默认为MSN Search,不过可以很方便的设置为Google或者其它;
Native XMLHTTPRequest Object的支持,这样,今后写AJAX代码不用再区分浏览器了。

最让我印象深刻的是IE Blog这次的宣传攻势:
Native XMLHTTPRequest object - IE7中对XMLHTTPRequest的Native支持
Frequently Asked Questions for the IE7 Beta 2 Preview - IE7中的常见问题
Windows RSS Platform - RSS的支持,期待API的公开
Security issue in IE7? - 第一个漏洞?
A New Look for IE - IE7 UI的变化
Part 1: Hello feeds - 对Feed的支持,Feed Reading Page不错,非常方便
Part 2: Discover and Subscribe to […]

Popularity: 63%

First glance at Ruby

大年三十的时候,上班已经没什么事儿了,就仔细读了读以前保存的很多不错的文章,包括这一篇"Ruby, PHP and a Conference",作者是大名鼎鼎的Bruce Eckle,"Thinking in Java"这个经典教材的作者。
一直就很想看看Ruby这个很火的语言,这两天终于有些时间,就找了一些文章看了看。
强烈推荐一篇"10 Things Every Java Programmer Should Know About Ruby",挺不错。
总结一下Ruby吸引我的地方:
1) Case Statement

In Ruby, the case statement can match with any object. It uses the “===” method in Object to perform the match, which can be overridden for your own classes. Since everything is really an object in Ruby, […]

Popularity: 25%


Creative Commons License
This work is licensed under a Creative Commons License.

你在我的心里永远是故乡