gpt4 book ai didi

c# - 使用 WIF 在 Asp.Net 4.5 上自定义身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:06 24 4
gpt4 key购买 nike

我有一个使用 Azure ACS 和 .net 4.5 使用声明设置的应用程序。我的应用程序也使用保管箱。我想知道是否可以让用户单独使用 Dropbox 来识别他们自己。

当用户使用 dropbox 和唯一 ID 登录时,我从 dropbox 获得了一个 token 。我在 .net 管道中的哪个位置告诉它我已经对用户进行了身份验证,这样的主体也会在下一个请求中设置。

为了简化示例,假设我有一个包含两个输入的表单。名字,通过。如果名称为 1234 并且密码为 1234。那么我想告诉 asp.net 管道用户已通过身份验证。这可能吗?或者我是否需要创建自定义 token 处理程序以将其集成到 WIF 中?

更新

我发现了这一点:我希望对解决方案发表评论,如果存在安全问题我应该注意。

        var sam = FederatedAuthentication.SessionAuthenticationModule;
if (sam != null)
{
var cp = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim> {new Claim("Provider","Dropbox")}, "OAuth"));
var transformer = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.ClaimsAuthenticationManager;
if (transformer != null)
{
cp = transformer.Authenticate(String.Empty, cp);
}
var token = new SessionSecurityToken(cp);
sam.WriteSessionTokenToCookie(token);
}

所有代码:

public HttpResponseMessage get_reply_from_dropbox(string reply_from)
{
var response = this.Request.CreateResponse(HttpStatusCode.Redirect);
var q = this.Request.GetQueryNameValuePairs();
var uid = q.FirstOrDefault(k => k.Key == "uid");
if (!string.IsNullOrEmpty(uid.Value))
{
var sam = FederatedAuthentication.SessionAuthenticationModule;
if (sam != null)
{
var cp = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim> {new Claim("Provider","Dropbox")}, "OAuth"));
var transformer = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.ClaimsAuthenticationManager;
if (transformer != null)
{
cp = transformer.Authenticate(String.Empty, cp);
}
var token = new SessionSecurityToken(cp);
sam.WriteSessionTokenToCookie(token);
}
}

response.Headers.Location = new Uri(reply_from);
return response;
}
public async Task<string> get_request_token_url(string reply_to)
{

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("OAuth",
string.Format("oauth_version=\"1.0\", oauth_signature_method=\"PLAINTEXT\", oauth_consumer_key=\"{0}\", oauth_signature=\"{1}&\"",
"<dropboxkey>","<dropboxsecret>"));
var data = await client.GetStringAsync("https://api.dropbox.com/1/oauth/request_token");

var pars = data.Split('&').ToDictionary(k=>k.Substring(0,k.IndexOf('=')),v=>v.Substring(v.IndexOf('=')+1));

return "https://www.dropbox.com/1/oauth/authorize?oauth_token=" + pars["oauth_token"]
+ "&oauth_callback=<MYSITE>/api/dropbox/get_reply_from_dropbox?reply_from=" + reply_to;


}

它的工作原理是用户请求身份验证 url,当用户对我的应用程序进行身份验证时,它会返回到 get_reply_from_dropbox 并登录用户。

我还需要处理其他一些事情,比如如果请求不是来自保管箱怎么办。

最佳答案

我使用 WIF 3.5(不完全相同)为我的网站做了这个,但它确实一起使用了 ACS+forms auth+OAuth,基本上它使用 form auth(你可以完全控制)或使用 ACS/OAuth 和链接帐户一起使用或仅单独使用 ACS/OAuth。

不过,您将不得不以不同方式处理注销。

http://garvincasimir.wordpress.com/2012/04/05/tutorial-mvc-application-using-azure-acs-and-forms-authentication-part-1/

DropBox 使用 OAuth,所以我会走那条路,然后如果您想“链接帐户”,请为链接到 DropBox Oauth 帐户的表单 auth 创建一个用户/密码。用户不一定必须知道正在使用什么身份验证约定。 ASP.NET MVC 4 在默认项目中内置了 OAuth/forms 身份验证。

关于c# - 使用 WIF 在 Asp.Net 4.5 上自定义身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com