我正在尝试使用DotNetOpenAuth(最新版本)来使用ASP.NET MVC 2网站.我得到第一部分工作,当用户选择OpenID提供者时调用操作,我得到正确的标识符传入,然后我被正确地重定向到提供者网站,我被重定向回我的网站,但这是问题所在.
我请求的声明为空(请参阅下面的代码).
public ActionResult TryAuth(string openid_identifier)
{
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if(response== null)
{
var req = openid.CreateRequest(openid_identifier);
req.AddExtension(new ClaimsRequest
{
Email = DemandLevel.Require,
Nickname = DemandLevel.Require
});
return req.RedirectingResponse.AsActionResult();
}
switch(response.Status)
{
case AuthenticationStatus.Authenticated:
{
var data = response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
// data is null <-----------------------------------------
return View("Index");
}
}
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
如果有人能指出我正在制造的(不那么)明显的错误,我将不胜感激.
我正在使用dotNetOpenAuth授权Google oAuth提供商.
我对以下区别之间的区别感到困惑:
consumerToken,consumerSecret,accessToken
从提供者我得到了accessToken一些用户.可以永远保持我吗?或者它会过期吗?
代码如何在不将用户重定向到"允许访问我的谷歌数据页面"的情况下启用授权?
Tl; dr版本: 我遇到异常:System.IO.FileLoadException:无法加载文件或程序集'DotNetOpenAuth.AspNet,版本4. 0 .0.0 ...
有点沮丧的是,msft在新的MVC4项目模板中使用了很多静态类和auth方法.想要将所有成员资格/身份验证功能包装到实现接口的类中,以便我可以模拟单元测试.
经过几个挣扎的晚上,我决定从头开始,所以我删除了所有DotNetOpenAuth*程序集引用和nuget package.config引用.我已经删除了对Micrsoft.Aspnet.WebPages.OAuth.dll的所有引用.
重新安装软件包: 我对解决方案中需要dll引用的三个项目运行install-package dotnetopenauth.aspnet.
解决方案不会构建,因为我的包装器有一个包装的方法:Microsoft.AspNet.WebPages.OAuth(.dll).OAuthWebSecurity.RegisteredClientData因此我需要对这个assy的引用,所以我运行install-package microsoft.aspnet.webpages .oauth反对同样的三个项目.
解决方案构建,但是当我运行引用Microsoft.AspNet.WebPages.OAuth(.dll).OAuthWebSecurity.RegisteredClientData的单元测试时,我得到一个运行时异常: System.IO.FileLoadException:无法加载文件或程序集'DotNetOpenAuth.AspNet,Version 4. 0 .0.0 ...
在所有三个项目,该组件中的引用参考文献4.1 .0.0,一样的DotNetOpenAuth.AspNet assemblyIdentity在我的web.config.
我正在使用resharper来运行测试,测试是nunit风格.
最后这里是我在fuslogvw中看到的粘贴.显然有些东西正在寻找4. 0 .0.0但我无法弄清楚它是做什么或做什么的(我有几次删除了这个转储中引用的临时数据文件夹):
***** 装配活页夹日志条目(11/13/2012 @ 10:04:54 PM) ************
操作失败.绑定结果:hr = 0x80131040.没有可用的描述.
程序集管理器从以下位置加载:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll在可执行文件C:\ Program Files(x86)\ JetBrains\ReSharper\v7.0\Bin\JetBrains.ReSharper.TaskRunner下运行.CLR4.MSIL.exe ---下面是详细的错误日志.
===预绑定状态信息=== LOG:User = i7\dave LOG:DisplayName = DotNetOpenAuth.AspNet,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 2780ccd10d57b246(完全指定)LOG:Appbase = file: ///C:/SVN/trunk/SoAndSo45/SoAndSo.Com.Tests.Unit/bin/Debug LOG:Initial PrivatePath = NULL …
有喜欢的相当多的问题,这和这其中所有的权利ClaimedIdentifier应被用来唯一标识每个用户.
成功登录后,我将存储ClaimedIndentifier在数据库中.每当用户登录时,我遍历我的记录寻找ClaimedIdentifier.但是我发现它ClaimedIdentifiers正在改变.我应该在数据库中存储什么来识别我的用户.我正在使用Google帐户.这就是我检索将其存储到数据库中的方式
OpenIdRelyingParty rp = new OpenIdRelyingParty();
IAuthenticationResponse r = rp.GetResponse();
UserController.addUser(new UserController.User(r.ClaimedIdentifier.ToString(), 0));
Run Code Online (Sandbox Code Playgroud) 我需要为我们将要托管的一些Web服务实现身份验证.我想使用开放标准,所以我对OAuth感兴趣.
我将使用WebAPI来提供这些服务.
所以这就是我遇到麻烦的地方:我读过的大部分(或者全部)Api Key/OAuth场景涉及(在某些时候)坐在屏幕前的用户.
我需要整理一个业务合作伙伴将要调用的API.这些呼叫将来自一个自动化过程 - 链中没有任何人可以被重定向到具有登录凭据的网站.
但是,我不希望任何人出现并致电我的服务.
所以,我读到了OAuth,以及它如何使用共享密钥签署每个请求,我认为这就是我所追求的.(我要么设置会话密钥,要么考虑将其中一个参数设为"滴答"值,并且只在短时间内接受请求等)
我有点希望我可以使用DotNetOpenAuth来完成这个(或类似的东西),但我遇到的每个例子都以"用户被重定向到登录页面"开头.我只需要"2腿"认证.
有没有使用DotNetOpenAuth这样做的例子?
还有更好的方法吗?
嗨,我正在使用Open Id Connect协议进行身份验证方案.我只是想知道Open Id Connect中基本客户端和隐式客户端场景之间的确切区别.
我正在尝试使用身份验证代码使用 oauth2 api。在第一步中,我通过提供客户端 ID 和机密来接收身份验证,现在在第二步中,我需要使用该身份验证代码的访问令牌。我试过下面的c#代码
var client1 = new RestClient("https://ant.aliceblueonline.com/oauth2/token");
var request1 = new RestRequest(Method.POST);
request1.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request1.AddParameter("code", "xxxxxxxxxxxxxxxxx");
request1.AddParameter("grant_type", "authorization_code");
request1.AddParameter("redirect_uri", "https://ant.aliceblueonline.com/plugin/callback");
request1.AddParameter("client_id", "MM01418");
request1.AddParameter("client_secret", "xxxxxxxxxxxxxx");
IRestResponse response = client1.Execute(request1);
Run Code Online (Sandbox Code Playgroud)
作为回应,我得到
OAuth 2.0 客户端支持客户端身份验证方法“client_secret_basic”,但请求了方法“client_secret_post”。您必须配置 OAuth 2.0 客户端的“token_endpoint_auth_method”值以接受“client_secret_post
尝试了很多,但无法解决。
我使用以下代码.
OpenIdRelyingParty createRelyingParty()
{
OpenIdRelyingParty openid = new OpenIdRelyingParty();
int minsha, maxsha, minversion;
if (int.TryParse(Request.QueryString["minsha"], out minsha))
{
openid.Settings.MinimumHashBitLength = minsha;
}
if (int.TryParse(Request.QueryString["maxsha"], out maxsha))
{
openid.Settings.MaximumHashBitLength = maxsha;
}
if (int.TryParse(Request.QueryString["minversion"], out minversion))
{
switch (minversion)
{
case 1: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V10; break;
case 2: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V20; break;
default: throw new ArgumentOutOfRangeException("minversion");
}
}
return openid;
}
OpenIdRelyingParty openid = createRelyingParty();
IAuthenticationRequest request = openid.CreateRequest(openIdBox.Text);
request.RedirectToProvider();
Run Code Online (Sandbox Code Playgroud)
上面的行进入openid站点进行身份验证.但我想在不进入openid站点的情况下进行身份验证.能帮帮我吗.谢谢
使用OpenID登录用户时,是否对OpenID URI(或标识符)执行了任何验证?或者你只是让图书馆处理它(如DotNetOpenAuth).
我正在关注DotNetOpenAuth的简单教程.当我在localhost visual studio开发机器上运行它时它工作正常.
但是,只要我将其移动到运行mono的测试/登台服务器,就会抛出以下错误:
位置:Page_Load
An exception was thrown by the type initializer for DotNetOpenAuth.Reporting
InnerException: System.TypeInitializationException: An exception was thrown by the type initializer for DotNetOpenAuth.Logger ---> System.TypeLoadException: A type load exception has occurred.
at DotNetOpenAuth.Logger.Create (System.String name) [0x00000] in <filename unknown>:0
at DotNetOpenAuth.Logger.CreateWithBanner (System.String name) [0x00000] in <filename unknown>:0
at DotNetOpenAuth.Logger..cctor () [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at DotNetOpenAuth.Reporting.Initialize () [0x00000] in <filename unknown>:0
at DotNetOpenAuth.Reporting.set_Enabled (Boolean …Run Code Online (Sandbox Code Playgroud)