Jef*_*eff 4 dotnetopenauth asp.net-mvc-4
我正在使用MVC 4的默认模板,并尝试将我自己的openID提供程序(例如http://steamcommunity.com/dev)添加到openID登录列表和openID框中,用户可以在其中键入其openID信息.
要添加Google,我只是取消评论
OAuthWebSecurity.RegisterGoogleClient();
Run Code Online (Sandbox Code Playgroud)
至于其他自定义解决方案,你可以做类似的事情
OAuthWebSecurity.RegisterClient(new SteamClient(),"Steam",null);
我遇到的麻烦是创建SteamClient(或通用的)http://blogs.msdn.com/b/webdev/archive/2012/08/23/plugging-custom-oauth-openid-providers.aspx不显示在任何地方更改网址.
我认为我无法找到答案的原因是大多数人认为这是常识.我更喜欢我的感觉并不常见.
public class OidCustomClient : OpenIdClient
{
public OidCustomClient() : base("Oid", "http://localhost:5004/") { }
}
Run Code Online (Sandbox Code Playgroud)
根据@ Jeff的回答,我创建了一个类来处理Stack Exchange OpenID.
寄存器:
OAuthWebSecurity.RegisterClient(new StackExchangeOpenID());
Run Code Online (Sandbox Code Playgroud)
类:
public class StackExchangeOpenID : OpenIdClient
{
public StackExchangeOpenID()
: base("stackexchange", "https://openid.stackexchange.com")
{
}
protected override Dictionary<string, string> GetExtraData(IAuthenticationResponse response)
{
FetchResponse fetchResponse = response.GetExtension<FetchResponse>();
if (fetchResponse != null)
{
var extraData = new Dictionary<string, string>();
extraData.Add("email", fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email));
extraData.Add("name", fetchResponse.GetAttributeValue(WellKnownAttributes.Name.FullName));
return extraData;
}
return null;
}
protected override void OnBeforeSendingAuthenticationRequest(IAuthenticationRequest request)
{
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
request.AddExtension(fetchRequest);
}
}
Run Code Online (Sandbox Code Playgroud)
检索额外数据:
var result = OAuthWebSecurity.VerifyAuthentication();
result.ExtraData["email"];
result.ExtraData["name"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2728 次 |
| 最近记录: |