C# 用Asp.net 4.0实现OAuth2

C# 用Asp.net 4.0实现OAuth2,c#,.net-4.0,oauth-2.0,owin,dotnetopenauth,C#,.net 4.0,Oauth 2.0,Owin,Dotnetopenauth,我有一个.NET4.0应用程序,需要添加第三层的OAuth2身份验证。我有点困惑(很难找到.NET4.0的示例和文档) 我可以将Microsoft.AspNet.Membership.OpenAuth(OAuth 2.0)与Asp.net 4.0(.net 4.0)一起使用吗 我的另一个选择是使用DotNetOpenAuth,但在.NET4.0中找到一个Webforms回调的示例时遇到了一些麻烦 据我所知,我应该有一个身份验证页面(登录页面): 以及一个回调页面(比如ashx页面),其中包含:

我有一个.NET4.0应用程序,需要添加第三层的OAuth2身份验证。我有点困惑(很难找到.NET4.0的示例和文档)

我可以将Microsoft.AspNet.Membership.OpenAuth(OAuth 2.0)与Asp.net 4.0(.net 4.0)一起使用吗

我的另一个选择是使用DotNetOpenAuth,但在.NET4.0中找到一个Webforms回调的示例时遇到了一些麻烦

据我所知,我应该有一个身份验证页面(登录页面):

以及一个回调页面(比如ashx页面),其中包含:


有意义吗?(我尽量简明扼要,不写我尝试过的所有内容,但如果需要,我可以提供更多信息)

如果您正在使用4.5或更高版本,请按照许多网站博客中的描述使用Owin,如果您使用Visual Studio 2013+模板创建Asp.net项目,您将有一个如何实现它的示例。或者你可以使用简单易用的

对于.NET4.0,我最终使用了DotNetOpenAuth,这不是一种找到如何调用库的简单方法,因此我将分享我的发现,这是获得用户授权的第一步id

var client = new WebServerClient(GetAuthServerDescription(), clientIdentifier: "client id");
client.ClientCredentialApplicator = ClientCredentialApplicator.PostParameter("secrete");

// CallBack
uri = RemoveQueryStringFromUri(callBack);
state.Callback = new Uri(uri);
var accessTokenResponse = client.ProcessUserAuthorization();
if (accessTokenResponse != null){
    //If you have accesstoek then do something 
} else {
    // If we don't yet have access, immediately request it.
    client.PrepareRequestUserAuthorization(state).Send();
}
使用GetAuthServerDescription构建AuthorizationServerDescription

回调url的方法是一个简单的post(获取令牌),因为我没有找到如何发送需要发送给提供商的确切参数

var medOK = new WebServerClient(GetAuthServerDescription(), clientIdentifier: "some client id");
medOK.ClientCredentialApplicator = ClientCredentialApplicator.PostParameter("some secret code");
var response = medOK.GetClientAccessToken();

// Then I get claims
var client = new WebServerClient(GetAuthServerDescription(), clientIdentifier: "client id");
client.ClientCredentialApplicator = ClientCredentialApplicator.PostParameter("secrete");

// CallBack
uri = RemoveQueryStringFromUri(callBack);
state.Callback = new Uri(uri);
var accessTokenResponse = client.ProcessUserAuthorization();
if (accessTokenResponse != null){
    //If you have accesstoek then do something 
} else {
    // If we don't yet have access, immediately request it.
    client.PrepareRequestUserAuthorization(state).Send();
}