【发布时间】:2013-01-14 19:37:03
【问题描述】:
我对此感到非常困惑,我知道周围有几个类似的重复帖子,阅读了相当多的内容,并且我对使用 SREG 和 AX 信息的 ClaimsResponse(至少我认为我知道)有所了解,启用 AXFetchAsSregTransform 的 web.config 配置,如何使用 ClaimsRequest 通过 DemandLevel.Require 获取 Google 电子邮件。我想要做的是让我的示例在 v4.0 之后与统一的 DotNetOpenAuth.dll 库一起工作(示例来自 strathweb),作为对我的项目而不是 nuget 包的单一引用。示例适用于 DotNetOpenAuth-3.4.7.11121 版本。如果有人能给我一些关于这个问题的信息,我将不胜感激。当我创建请求并使用 DotNetOpenAuth.dll v3.4.7 时一切顺利:
公共 IAuthenticationRequest ValidateAtOpenIdProvider(字符串 openIdIdentifier, Realm realm, Uri returnurl)
{
IAuthenticationRequest openIdRequest = openId.CreateRequest(Identifier.Parse(openIdIdentifier), realm, 返回网址);
var fields = new ClaimsRequest() { Email = DemandLevel.Require, FullName = DemandLevel.Require, Nickname = DemandLevel.Require }; openIdRequest.AddExtension(fields); return openIdRequest; }
并将用户重定向到服务提供商:
var response = openidemembership.ValidateAtOpenIdProvider(标识符, realm, new Uri("DomainUrl or Localhost/GoogleCallback"));
if (response != null) { return response.RedirectingResponse.AsActionResult(); }
在用户被重定向回来之后,这两个方法被调用:
public OpenIdUser GetUser() {
OpenIdUser user = null; IAuthenticationResponse openIdResponse = openId.GetResponse(); if (openIdResponse.IsSuccessful()) { user = ResponseIntoUser(openIdResponse); } return user; }私有 OpenIdUser ParseResponse(IAuthenticationResponse 响应) {
OpenIdUser user = null; var claimResponseUntrusted = response.GetUntrustedExtension<ClaimsResponse>(); var claimResponse = response.GetExtension<ClaimsResponse>(); if (claimResponse != null) { user = new OpenIdUser(claimResponse, response.ClaimedIdentifier); } else if (claimResponseUntrusted != null) { user = new OpenIdUser(claimResponseUntrusted, response.ClaimedIdentifier); } return user; }
在控制器内部:
public ActionResult GoogleCallback() {
var user = openidemembership.GetUser(); if (user != null) { //Create cookie and redirect the user back return new RedirectResult(Request.Params["ReturnUrl"] ?? "/"); } return View(); }
Web.Config
<section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true" />
<dotNetOpenAuth>
<openid>
<relyingParty>
<behaviors>
<add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>
</relyingParty>
</openid>
</dotNetOpenAuth>
仍然在使用 DotNetOpenAuth.dll v4.0 +++ 之后,在 ParseResponse 方法调用中我无法从 ClaimsResponse 获取任何值。我正在使用命名空间 DotNetOpenAuth.OpenId.Extensions.SimpleRegistration。使用 nuget 一切都很好,但是有没有其他方法可以让它与单个 dll 一起工作,我真的不会将所有这些来自 nuget 的引用添加到我目前正在为我的一位客户工作的现有项目中,谢谢你提前。
【问题讨论】:
标签: c# asp.net-mvc-4 openid dotnetopenauth