C# · 12月 31, 2021

c# – 如何为应用程序实现OAuth?

@H_502_0@我正在为需要执行以下操作的客户端创建一个应用程序:

>允许用户使用Google,Facebook,Twitter和LinkedIn进行身份验证.
>允许用户在注册后添加其他提供商. (即如果用户使用Google进行身份验证,那么他们也应该能够添加任何或所有其他提供者).
>允许用户导入Google联系人,Facebook朋友列表,Twitter关注者和Linkedin朋友,以构建自定义联系人列表.

哪里有最好的地方开始学习这个?有没有一个标准,每个人都用这些东西在.NET中?我一直在搜索几个小时,而似乎大多数人指向DotNetOpenAuth,似乎找不到任何有关如何使用图书馆的固体教程.下载附带样品,但仍然让我感到困惑.

我认为这样简单:

>配置提供者的秘密.
>开始使用提供者登录
>使用验证Cookie验证用户
>在我的数据库中创建用户记录,并从提供商存储唯一的ID.

但是,似乎每个提供者都拥有自己的一套代码,它们都是如此的不同,令人困惑. Facebook有一些图形对象,twitter有一些我不明白的“InMemoryTokenManager”,Google甚至没有一个身份验证示例,只有一个Google通讯录示例.最重要的是,由于某些原因,您必须将示例中的某些ApplicationBlock演示文稿中的一些代码复制到自己的应用程序中,并且无需知道它正在尝试做什么就可以编译,而且是一个艰巨的任务.

我觉得我失去了所有这些基本的东西.

在这一点上,即使是一本书推荐也是很棒的.

我相信我理解OAuth的高层次概念,但一旦我试图深入挖掘,我马上迷路了.

解决方法 首先,如果您使用的是网络4.5,那么使用外部库的确没有任何意义,默认的asp.net模板附带了大多数提及的提供者的验证码.

其次,如果你仍然需要一个关于oauth2身份验证的一些细节的教程,请看Ben Foster http://ben.onfabrik.com/posts/oauth-providers这个伟大的帖子

第三,不幸的是,如果您需要任何其他的身份验证,则没有一个协议.因此,每个提供者都有自己的方式暴露这些附加数据 – 联系人,帖子等.你不能做太多的事情,它与oauth2无关,但只是一种方式来调用一个特定的api,这是偶然的基于oauth2认证暴露为rest / xml Web服务.这意味着如果您仅进行身份验证,则每个提供程序的协议大致相同.更多的是具体的.

第四,我会坚持提供者返回的电子邮件地址,而不是内部的ID.并非所有提供商都支持该ID,而所有的提供商都可以返回用户电子邮件.您可以信赖这些信息,因为提供商在通过oauth2返回之前验证电子邮件.