标签: dotnetopenauth

使用ASP.NET MVC中的DotNetOpenId记住我

在ASP.NET MVC中使用DotNetOpenAuth 3并实现RememberMe工具......

我发现即使我在FormsAuthentication.RedirectFromLoginPage和FormsAuthentication.SetAuthCookie中将createPersistentCookie设置为true,一旦ASP.NET会话超时,用户也不会被记住.

如果我检查cookie我发现它被标记为持久性并且将来确实有一个到期日期,我假设因为我将web.config FORMS超时设置为几年.无论如何,如果用户关闭浏览器并重新打开它,他们就会被正确记住 - 只要ASP会话没有超时.

Scott Hanselmann的一篇较老的帖子让我想知道是不是因为FormsAuthentication试图更新身份验证票证,而且可能在OpenId模型中无效但我在web.config中设置了FORMS SlidingExpiration ="false",无论如何我认为强制持久cookie将使这些东西无关紧要.

我也想知道为什么DotNetOpenId MVC示例不包含RememberMe复选框 - 可能有一些棘手的问题吗?

另一方面,在StackOverflow,我看到我会在会话中自动记住.想知道他们是否使用了除DotNetOpenId以外的东西来进行OpenId认证.

还有其他人在ASP.NET MVC中使用DotNetOpenId成功完成了RememberMe吗?任何招数?

[更新]

谢谢你试图帮忙,安德鲁.原来这不是关于DotNetOpenId.

在阅读本文之后,我收集到的是,我的托管服务提供商可能会定期回收应用程序池,这导致使用新机器密钥完成身份验证票证加密.

根据前面的链接文章,我在我的Web.Config中的System.Web下添加了以下内容,它解决了这个问题:

<machineKey
    validationKey="(generated a new key to place here)"     
    decryptionKey="(generated a new key to place here)"
    validation="SHA1"
    decryption="AES" />
Run Code Online (Sandbox Code Playgroud)

openid asp.net-mvc dotnetopenauth

13
推荐指数
1
解决办法
1372
查看次数

DotNetOpenAuth的教程在哪里以及如何解决其样本中的编译错误

我知道stackoverflow使用OpenID身份验证.我也想尝试使用它.我正在使用带有C#的asp.net mvc 2.0.

我找到了这个

http://www.dotnetopenauth.net/

我想知道这是否是用于stackoverflow的.

任何教程也都很好.

编辑

我正在尝试加载一些示例项目,但是当我在VS2010中构建它时,我得到了

Error   6   'System.Diagnostics.Contracts.ContractInvariantMethodAttribute' is inaccessible due to its protection level C:\Users\chobo2\Downloads\DotNetOpenAuth-3.4.6.10357\DotNetOpenAuth-3.4.6.10357\Samples\OpenIdOfflineProvider\TextBoxTextWriter.cs  73  4   OpenIdOfflineProvider
Error   7   The type or namespace name 'ContractInvariantMethod' could not be found (are you missing a using directive or an assembly reference?)   C:\Users\chobo2\Downloads\DotNetOpenAuth-3.4.6.10357\DotNetOpenAuth-3.4.6.10357\Samples\OpenIdOfflineProvider\TextBoxTextWriter.cs  73  4   OpenIdOfflineProvider
Run Code Online (Sandbox Code Playgroud)

c# dotnetopenauth asp.net-mvc-2

12
推荐指数
3
解决办法
1万
查看次数

如何通过DotNetOpenAuth使用OAuth2访问令牌授权访问ServiceStack资源?

我使用DotNetOpenAuth创建了一个OAuth2授权服务器,它工作正常 - 我正在使用资源所有者密码流,并成功地为访问令牌交换用户凭据.

我现在想要使用该访问令牌从ServiceStack API中的安全端点检索数据,我无法弄清楚如何执行此操作.我已经检查了ServiceStack附带的Facebook,Google等提供商,但目前尚不清楚我是否应该遵循相同的模式.

我想要实现的目标(我想!)是

  1. OAuth 客户端(我的应用程序)要求资源所有者('Catherine Smith')提供凭据
  2. 客户端授权服务器提交请求,接收访问令牌
  3. 客户端资源服务器请求安全资源() GET /users/csmith/photos
    • 访问令牌被包括在HTTP头,例如 Authorization: Bearer 1234abcd...
  4. 资源服务器解密访问令牌验证的身份资源拥有者
  5. 资源服务器会检查资源所有者可以访问请求的资源
  6. 资源服务器返回的资源客户

步骤1和2正在运行,但我无法弄清楚如何将DotNetOpenAuth资源服务器代码与ServiceStack授权框架集成.

我是如何实现这一目标的?我在如何使用ServiceStack构建安全api作为OAuth2.0的资源服务器时发现了类似的StackOverflow帖子但它不是一个完整的解决方案,似乎没有使用ServiceStack授权提供程序模型.

编辑:更多细节.这里有两个不同的网络应用程序.一个是身份验证/授权服务器 - 它不承载任何客户数据(即没有数据API),但公开了接受用户名/密码并返回OAuth2访问令牌和刷新令牌的/ oauth/token方法,还有提供令牌刷新功能.这是基于ASP.NET MVC构建的,因为它几乎与DotNetOpenAuth附带的AuthorizationServer示例相同.这可能会在以后更换,但现在它是ASP.NET MVC.

对于实际的数据API,我使用的是ServiceStack,因为我发现它比WebAPI或MVC更好地暴露了ReSTful数据服务.

所以在下面的例子中:

序列图

客户端是用户的本地机器上运行的桌面应用程序,该验证服务器是ASP.NET MVC + DotNetOpenAuth和资源服务器是ServiceStack

需要的特定DotNetOpenAuth代码片段是:

// scopes is the specific …
Run Code Online (Sandbox Code Playgroud)

dotnetopenauth oauth-2.0 servicestack

12
推荐指数
2
解决办法
6686
查看次数

Dotnetopenauth使用自定义身份提供商进行单点登录

我正在尝试设置DotNetOpenAuth示例,以便为自定义提供程序提供可用的SSO解决方案.我正在使用OpenIdProviderMvc示例项目,看起来工作正常.

我的问题是设置"消费者",在这种情况下是OpenIdRelyingPartyMvc示例项目,我无法将其配置为使用OpenIdProvider.

我试图在消费者的web.config上设置一个端点,如下所示:

<trustedProviders rejectAssertionsFromUntrustedProviders="true">
    <add endpoint="http://localhost:4864/OpenID/Provider" />
</trustedProviders>
Run Code Online (Sandbox Code Playgroud)

但我得到的是"找不到OpenID端点".错误(实际上,我不太确定在OpenID框上放什么......)

该项目几乎没有记录.有人能指出我正确的方向吗?

至少让供应商和消费者互相工作和交谈?

asp.net-mvc dotnetopenauth asp.net-mvc-4

12
推荐指数
1
解决办法
5790
查看次数

FormsAuthentication对象已废弃[使用MVC5]

我在MVC5站点中使用以下代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel loginModel) {
    if (ModelState.IsValid) {
        var authenticated = FormsAuthentication.Authenticate(loginModel.UserName, loginModel.Password);
        if (authenticated) {
            FormsAuthentication.SetAuthCookie(loginModel.UserName, true);
            return RedirectToAction("AdminPanel");
        }
        ModelState.AddModelError("", "The username and password combination were incorrect");
    }
    return View(loginModel);
}
Run Code Online (Sandbox Code Playgroud)

这引发了以下警告:

System.Web.Security.FormsAuthentication.Authenticate(string,string)'已过时:'建议的替代方法是使用Membership API,例如Membership.ValidateUser.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=252463.

首先是免责声明 - 我是那些喜欢与事物保持同步的开发者之一,我更愿意完全避免VS中的警告.但是,在这个特定的实例中,我使用非常原始的身份验证,它直接来自web.config,如下所示:

<authentication mode="Forms">
    <forms loginUrl="~/account/login" timeout="2880" slidingExpiration="true" name=".ASPXFORMSAUTH">
        <credentials passwordFormat="SHA1">
            <user name="MyUserName" password="a-big-long-password-hash"/>
        </credentials>
    </forms>
</authentication>
Run Code Online (Sandbox Code Playgroud)

在这个项目中绝对没有进一步的登录要求 - 使用数据库是过度的,并且不需要分布式登录; 基本上,在web.config中存储细节是最理想的解决方案,每个应用程序可能只有一个用户.我无疑会从控制器(使用DI/IoC)中抽象出认证代码,但我仍然打算使用FormsAuthentication对象对web.config中的详细信息进行身份验证.

虽然我完全了​​解会员提供商,DotNetOpenAuth和新的(但非常可怕的)基于OWIN的身份验证模型,但上述代码绰绰有余.

第一个问题 - 为什么当这是一个完全有效的用例时,FormsAuthentication已经过时了?我知道FormsAuthentication是一个密封的黑盒子,难以测试,其背后的代码是特定于域的,但在这个特定的实例中(我想直接从web.config部分读取详细信息),似乎很疯狂编写会员提供者或自定义身份验证服务?

第二个问题 - 除非我遗漏了某些内容,否则新的OWIN模型用于分布式身份验证,不适用于基于角色的企业级安全系统.从我读过的很多博客文章,白皮书和SO帖子来看,它似乎仍然不完整.我的假设是对的吗?OWIN是所有安全系统的未来,还是应该继续编写更适合我客户需求的定制安全系统?

c# forms-authentication dotnetopenauth owin asp.net-mvc-5

12
推荐指数
2
解决办法
8349
查看次数

dotNetOpenAuth示例问题获得正确的安全上下文

我正在浏览dotNetOpenAuth示例(OpenIdRelyingPartyMVC和OpenIdProviderMvc)并提出一个问题以便更好地理解......

在依赖方应用程序的MembersArea中,我使用OpenID" http:// localhost:4864/user/bob3 "作为示例.我被重定向到提供者登录页面,然后我使用Bob 5的凭据.成功登录后,我被重定向回RelyingParty,其中写着"祝贺Bob3 ......".

这只是依赖方应用程序中的一个绑定错误,它接受提交给提供程序的OpenID,或者我在Bob3的安全上下文中使用Bob5的凭据进行身份验证,这在我看来是一个主要的安全问题,如我可以通过提供商处的一个工作用户帐户进行身份验证.

openid federated-identity dotnetopenauth

12
推荐指数
1
解决办法
252
查看次数

我可以将OpenId与ASP MembershipProvider一起使用吗?

我有一个ASP.Net 2.0网站,目前正在使用自定义MembershipProvider和标准登录控件.我想用DotNetOpenId替换登录控件.

我重写了验证用户名和密码的ValidateUser,但是在使用OpenId时我不需要实现它.

是否可以使用OpenId并且仍然可以使用成员资格提供程序,以便我仍然可以使用它来访问当前登录的用户?

或者是否需要使用提供者模型?

asp.net openid asp.net-membership membership-provider dotnetopenauth

11
推荐指数
1
解决办法
2001
查看次数

DotNetOpenAuth和Facebook

我正在尝试使用DotNetOpenAuth进行一些网络单点登录功能.

我得到的样本适用于谷歌和雅虎,但我正在与Facebook挣扎.

我正在使用CTP(4.0.0.11165),并在此SO问题中遵循了示例.

但是,我在行上遇到运行时错误:

IAuthorizationState authorization = client.ProcessUserAuthorization();
Run Code Online (Sandbox Code Playgroud)

错误是:

无法获取访问令牌.授权服务器报告原因:(未知)

有任何想法吗?

c# asp.net openid dotnetopenauth

11
推荐指数
1
解决办法
1997
查看次数

如何在ASP.NET MVC4中使用具有唯一标识符URL的OpenID提供程序

SimpleMembershipProviderASP.NET MVC4中实现的新功能允许为两个流行的OpenID提供商(谷歌和雅虎)和三个OAuth提供商(微软,Facebook,Twitter)提供简单的内置支持.

提供者实现了DotNetOpenAuth.AspNet.ClientsSimpleMembershipProvider所有使用静态URL 一起使用的身份服务 - 也就是说,所有用户使用相同的知名URL来访问提供者.用户的OpenID标识符与用于访问身份服务的URL分开.

例如,Google的OpenID服务网址适用https://www.google.com/accounts/o8/id于所有用户.

这适用SimpleMembershipProvider于MVC4,其中身份提供者的URL需要在MVC应用程序启动时已知,不变并注册.

问题是,其他OpenID提供商通常使用用户的唯一OpenID标识符作为访问身份服务的URL.

例如,AOL和WordPress 分别使用https://openid.aol.com/{username}https://{username}.wordpress.com.

如果你SimpleMembershipProvider用你自己的a实现替换ExtendedMembershipProvider,那么你可以推出自己的提供程序实现,但是它不能与开箱即用的MVC4 Account控制器一起使用.

SimpleMembershipProvider当提供程序在URL中使用带有用户名的唯一标识符时,如何使用the实现新的OpenID依赖方?

openid asp.net-mvc dotnetopenauth asp.net-mvc-4 asp.net-4.5

11
推荐指数
1
解决办法
5154
查看次数

DotNetOpenAuth 4.3和Google - OpenID 2.0 + OAuth 1.0已弃用

如果你想切入追逐,问题是:在asp.net mvc 5中使用DotNetOpenAuth与Google的最佳/官方方式是什么?

大约一年前,我使用了OAuth(DotNetOpenAuth oAuth和OpenID),因为它开箱即用于asp.net MVC 4(就像在示例项目中一样).从那时起,我成功地将它用于谷歌,脸谱,雅虎和微软.但是,最近我一直在用户登录谷歌时出现间歇性问题.我已经尝试升级到MVC 5和DotNetOpenAuth 4.3,但我得到了同样的结果.

当我查看谷歌文档时,我发现了这个:

重要提示:Google已弃用其对OAuth 1.0的支持.如果您使用的是OpenID 2.0 + OAuth 1.0,我们建议您切换到Google+登录.Google+登录为OAuth 2.0身份验证机制提供了丰富的社交功能,并可访问其他Google桌面和移动功能.它支持所有Google用户和透明迁移.有关详细信息,请参阅迁移Google身份验证.

我完全错了,因为我认为开箱即用的asp.net mvc 4 DotNetOpenAuth使用OpenID 2.0(我使用minimumRequiredOpenIdVersion ="V20")+ OAuth 1.0.我可以在DotNetOpenAuth源中看到'product'下有一个OAuth 2.0库,但我不知道如何使用它.另外,我对Auth 2.0有点紧张,因为我读过的内容并不是非常互补,而且似乎更容易在脚下拍摄(可能没有根据,但它似乎是一个反复出现的主题).

对于Google+,我发现这些说明看起来非常简单,但差不多一年前,所以我想知道这是否仍然是最佳方式.我还发现这个git存储库实现了Google oauth2.不过,我想知道这是否仍然具有相关性,因为它是从前一段时间开始的.

所以,问题是 - 在asp.net mvc5中使用DotNetOpenAuth与Google的最佳/官方方式是什么?希望我没有错过任何明显的东西,在这种情况下只需指向某些链接即可.

更新 我发现这个问题和这个相关的问题.我想我会用git google auth2除非我被告知否则.

解析度

我做了以下事情: -

  • 按照接受的答案提供的链接中的步骤操作.这是这个链接.

重要的是在登录后继续使用SSL而不是回退到HTTP,您的登录cookie就像您的用户名和密码一样秘密...在您登录后重定向回HTTP不会使当前请求或将来的请求更快.

  • 在Nuget上获得最新的DotNetOpenAuth.GoogleOAuth2.

  • 我查看了这个msdn博客(由同一作者)关于如何最好地保护网站的建议.基本上,建议添加以下强制所有页面为HTTPS的内容:

    filters.Add( new System.Web.Mvc.RequireHttpsAttribute() );

最终这意味着整个网站都是HTTPS.自从进行这些更改后,该网站运行良好.

dotnetopenauth asp.net-mvc-4 asp.net-mvc-5

11
推荐指数
2
解决办法
5461
查看次数