我听说过不同的事情.似乎微软尝试了测试服务,但我不知道它是否仍然可用,或者是否已投入生产.
如果Windows Live ID是OpenID提供程序,则端点在哪里?
通常使用谷歌OpenId工作正常,每天数千次,然后它将开始间歇性出错并超时一小时左右(一些请求将验证,但不是全部).重复验证最终会起作用.
错误消息是:
Event code: 200000
Event message: No OpenID endpoint found. : https://www.google.com/accounts/o8/id
Sequence contains no elements
Run Code Online (Sandbox Code Playgroud)
添加log4net产量:
DotNetOpenAuth.Yadis:
Error while performing discovery on: "https://www.google.com/accounts/o8/id":
DotNetOpenAuth.Messaging.ProtocolException:
Error occurred while sending a direct message or getting the response.
---> System.Net.WebException: The operation has timed out
at System.Net.HttpWebRequest.GetResponse()
at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse
(HttpWebRequest request, DirectWebRequestOptions options)
in c:\...\Dot...Core\Messaging\StandardWebRequestHandler.cs:line 127
--- End of inner exception stack trace ---
at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse
(HttpWebRequest request, DirectWebRequestOptions options)
in c:\...\Dot...Core\Messaging\StandardWebRequestHandler.cs:line 175
at DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse
(HttpWebRequest request, DirectWebRequestOptions options)
in c:\...\Dot...Core\Messaging\UntrustedWebRequestHandler.cs:line …Run Code Online (Sandbox Code Playgroud) 我正在基于DotNetOpenAuth实现OAuth2授权/资源服务器.我的服务器将发布具有很长使用寿命的访问令牌.这些令牌将用于iOS设备.流程,我看到的方式是这样的,1)要求用户在iOS设备上输入他们的用户名/密码2)请求访问令牌,授权类型为资源所有者密码凭证3)令牌被授予和存储在iOS设备上供将来使用.
现在用户不时被禁用.我想同时撤销令牌.我该怎么做呢?我怀疑我需要使用ICryptoKeyStore.RemoveKey方法,但不知道如何找到要删除的键.
注1:将来服务器将由第三方Web应用程序使用.
注2:要求获得资源所有者密码凭证的授权类型源于这样一个事实,即确定在iOS设备上实现浏览器重定向是不值得的.
更新1
源代码中的一些挖掘表明DotNetOpenAuth不支持强制令牌过期的能力.此外,在标准实现中,甚至不检查令牌的生存期.至于我能看到CALSS负责,这是StandardAccessTokenAnalyzer它忽略了Lifetime和UtcCreationDate性能.此外,标准ResourceServer类似乎没有任何数据库访问编码,令牌有效性仅由令牌内容检查,所以似乎如果我需要添加使令牌过期的能力,我需要ResourseServer自己连接到数据库.我错过了什么吗?
更新2 我想我在这里找到了答案:https://groups.google.com/forum/#!topic /dotnetopenid/aLabu1ujkt4这不是我所希望的,我仍然有一些不清楚.例如,安德鲁写道:
然后,您的自定义类可以获取访问令牌,然后使用私有HTTP请求到授权服务器以验证令牌的持续有效性.
目前尚不清楚这种验证是如何发生的,因为它AccessToken不包括授权ID.这可能使查找目标授权记录变得困难.从理论上讲,我们可以尝试通过客户端,用户和发布时间的组合来查找它,但据我所知,并不能保证它们是唯一的.
我从GitHub下载了最新的DotNetOpenAuth代码,最初它无法构建.我通过运行以下命令解决了这个问题:
sn -Vr *,2780ccd10d57b246
Run Code Online (Sandbox Code Playgroud)
在这里找到:
http://www.dotnetopenauth.net/developers/contributing/quickstart-environment/
我继续对DotNetOpenAuth.AspNet项目进行了一些修改.编译得很好.然后我在样本下创建了一个MVC 4 Web项目来测试我的更改.该解决方案再次编译.但是,一旦我点击调试,我就会得到死亡的ASP.NET黄色屏幕,并出现以下错误:
无法加载文件或程序集"DotNetOpenAuth.AspNet"或其依赖项之一.强名称签名无法验证.程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名.(HRESULT异常:0x80131045)
MVC 4项目是从空模板创建的,因此没有对Microsoft.Web.WebPages.OAuth的引用
我错过了什么?我完成了上面链接中的其他步骤:
sn -k mykeyfile.pfx
sn -i mykeyfile.pfx mykeycontainer
sn -p mykeyfile.pfx mykeyfile.pub
sn -q -t mykeyfile.pub
sn -Vr *,<YourPublicKeyTokenHere>
Run Code Online (Sandbox Code Playgroud)
并修改了文件\ tools\DotNetOpenAuth.props,特别是使用新值的行:27,29,30
26. <SignAssembly>true</SignAssembly>
27. <PublicKeyFile Condition="'$(PublicKeyFile)' == ''">$(ProjectRoot)src\official-build-key.pub</PublicKeyFile>
28. <AssemblyOriginatorKeyFile Condition="'$(AssemblyOriginatorKeyFile)' == ''">$(PublicKeyFile)</AssemblyOriginatorKeyFile>
29. <KeyPairContainer Condition="'$(KeyPairContainer)' == ''">DotNetOpenAuth</KeyPairContainer>
30. <PublicKeyToken>2780ccd10d57b246</PublicKeyToken>
31. <DelaySign>true</DelaySign>
32. <SignedSubPath>signed\</SignedSubPath>
Run Code Online (Sandbox Code Playgroud) 当用户单击我的站点中需要身份验证的链接时,浏览器将重定向到登录页面.登录页面包含returnUrl查询字符串参数.问题是,如果用户使用OpenID进行身份验证,则提供程序会将用户重定向回登录页面,并且不包含returnUrl参数,这非常无聊,因为我将用户重定向到主页而不是尝试的页面.
我正在使用DotNetOpenID,有没有办法解决这个问题?
我工作的公司想要向外界发布内部网站,但也希望以一种简单的方式识别访问者.某些功能对所有访问者都可见,但大多数访问者必须可见.(并且一些功能仅限于管理员访问者.)虽然管理层正在考虑实施我们自己的身份验证系统,但我建议只使用已有的现有技术,并使用户名/密码的管理远离我们.(因为当我们讨论安全问题时,我们只是业余爱好者.身份验证需要非常好.)
所以我从Google 开始使用OpenID并检查了他们提供的库.看起来很容易使用,我可以获得告诉我用户已通过身份验证的令牌.但是,如何识别此用户,以便将我们的个人资料信息链接到他的ID /令牌/随便?
我知道我错过了一些东西,所以要保持简单:我只需要一些示例,说明如何使用Google验证访问者,然后获取一些可以用来永久链接到此用户的令牌.(因此,没有会话令牌.)然后,此令牌可用于用户填写他/她的个人资料.
我试图弄清楚如何通过open id验证后获取用户信息.如果我在呼叫时提供ClaimsRequest或FetchRequest并不重要
response.GetExtension<ClaimsResponse>
//Or
response.GetExtension<FetchResponse>
//Or
response.GetUntrustedExtension<ClaimsResponse>
// OR
response.GetUntrustedExtension<FetchResponse>
Run Code Online (Sandbox Code Playgroud)
我总是得到一个空引用.我正在添加信息,就像我看到的所有示例一样:
request.AddExtension(new ClaimsRequest{ Email = DemandLevel.Require });
// Or
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
request.AddExtension(fetch);
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
更新
添加安德鲁建议的配置信息让我成为了那里的一部分.我终于得到一个ClaimsResponse,response.GetUntrustedExtension<ClaimsResponse>但response.GetExtension<ClaimsResponse>仍然返回null.返回的ClaimsResponse实际上并不包含我请求的任何数据.这是请求:
var request = openId.CreateRequest(Request.Form["openid_identifier"]);
request.AddExtension(new ClaimsRequest
{
BirthDate = DemandLevel.Request,
Country = DemandLevel.Request,
Email = DemandLevel.Require,
FullName = DemandLevel.Request,
Gender = DemandLevel.Request,
Language = DemandLevel.Request,
Nickname = DemandLevel.Request,
PostalCode = DemandLevel.Request,
TimeZone = DemandLevel.Request
});
return request.RedirectingResponse.AsActionResult();
Run Code Online (Sandbox Code Playgroud)
这是我的配置
<uri>
<idn enabled="All"/>
<iriParsing enabled="true"/>
</uri>
<dotNetOpenAuth>
<openid maxAuthenticationTime="0:05"> …Run Code Online (Sandbox Code Playgroud) 我正在使用DotNetOpenAuth和MVC 4应用程序.所有突然的Google身份验证都失败了(MS正在运行).股票代码执行此操作:
[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
var result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
if (!result.IsSuccessful)
{
return RedirectToAction("ExternalLoginFailure");
}
Run Code Online (Sandbox Code Playgroud)
我知道这result.IsSuccessful是假的,但我怎么弄明白呢?result.Error一片空白.
我也看了这个页面使用log4net.我确实在本地开发盒上登录,但在将其部署到远程服务器时却没有.
log4net webconfig:
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="RelyingParty.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个简单的Oauth2登录身份验证.但是我停留在抛出以下异常的回调:
[ProtocolException: Unexpected OAuth authorization response received with callback and client state that does not match an expected value.]
DotNetOpenAuth.Messaging.ErrorUtilities.VerifyProtocol(Boolean condition, String unformattedMessage, Object[] args) +426
DotNetOpenAuth.OAuth2.WebServerClient.ProcessUserAuthorization(HttpRequestBase request) +771
Run Code Online (Sandbox Code Playgroud)
这里讨论了完全相同的问题
在我的例子中,SessionID保持不变,但DotNetOpenAuth.WebServerClient.XSRF-Session cookie在回调时更改了它的值.
执行:
public void Authorize(HttpRequest request)
{
string callbackString = request.Url.AbsoluteUri;
Uri callbackUri = new Uri(callbackString);;
IAuthorizationState authorization = nimbleClient.ProcessUserAuthorization();
if (authorization == null)
{
// Kick off authorization request
nimbleClient.RequestUserAuthorization(returnTo: callbackUri);
}
else
{
//Get AccesToken
Uri.EscapeDataString(authorization.AccessToken);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Google OpenID与Azure上托管的MVC 4应用程序一起使用,但它仍然失败.虽然不是直接的.当我部署应用程序时,它一次又一次地完美运行.然后我离开它一段时间,通常是一天,但可能是一个小时,然后再试一次,它每次都失败.然后刷新,返回主页,该主页将您转到登录页面并再次运行.
错误是:
[InvalidOperationException: Sequence contains no elements]
System.Linq.Enumerable.First(IEnumerable`1 source) +498
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +106
[ProtocolException: No OpenID endpoint found.]
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +303
Tools.Helpers.GoogleApps.Login(Uri returnUrl) in c:\Users\Simon\Documents\Visual Studio 2012\Projects\Internal Utils\Website\Helpers\GoogleApps.cs:33
Tools.Helpers.ExternalLoginResult.ExecuteResult(ControllerContext context) in c:\Users\Simon\Documents\Visual Studio 2012\Projects\Internal Utils\Website\Helpers\ExternalLoginResult.cs:25
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +613
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +263
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +230
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult …Run Code Online (Sandbox Code Playgroud) dotnetopenauth ×10
openid ×5
.net ×3
asp.net ×2
c# ×2
asp.net-mvc ×1
azure ×1
oauth ×1
oauth-2.0 ×1