![](/img/trans.png)
[英]Using DotNetOpenAuth as OpenID Provider in a customer httphandler assembly
[英]Need Help with .NET OpenId HttpHandler
我正在嘗試使用單個HTTPHandler來驗證用戶的開放ID並接收ClaimResponse。 初始身份驗證有效,但claimresponse無效。 我收到的錯誤是“此網頁具有重定向循環”。 我究竟做錯了什么?
public class OpenIdLogin : IHttpHandler
{
private HttpContext _context = null;
public void ProcessRequest(HttpContext context)
{
_context = context;
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
// Stage 2: user submitting Identifier
openid.CreateRequest(context.Request.Form["openid_identifier"]).RedirectToProvider();
}
else
{
// Stage 3: OpenID Provider sending assertion response
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
//FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, false);
string identifier = response.ClaimedIdentifier;
//****** TODO only proceed if we don't have the user's extended info in the database **************
ClaimsResponse claim = response.GetExtension<ClaimsResponse>();
if (claim == null)
{
//IAuthenticationRequest req = openid.CreateRequest(identifier);
IAuthenticationRequest req = openid.CreateRequest(Identifier.Parse(identifier));
var fields = new ClaimsRequest();
fields.Email = DemandLevel.Request;
req.AddExtension(fields);
req.RedirectingResponse.Send(); //Is this correct?
}
else
{
context.Response.ContentType = "text/plain";
context.Response.Write(claim.Email); //claim.FullName;
}
break;
case AuthenticationStatus.Canceled:
//TODO
break;
case AuthenticationStatus.Failed:
//TODO
break;
}
}
}
重定向循環是因為,如果您在沒有電子郵件的情況下得到肯定的斷言,則會立即將用戶發送回去要求它……一遍又一遍...問題是某些操作人員永遠不會給您提供電子郵件地址。 這些相同的OP可能會立即再次重定向,並再次缺少電子郵件地址。
當聲明沒有肯定的主張時,您需要向用戶顯示您自己的頁面,要求他個人提出這些聲明。
通常,一旦收到接受的請求,便要存儲聲明的標識符並將其用於會話的其余部分。 該消息可能表示提供程序正在拒絕您的請求,因為它認為您存在重定向循環。 您應該接受對用戶進行身份驗證,直到會話結束,而不是對每個請求都驗證ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.