使用 Asp.net 4.0 实现 OAuth2

本文关键字:实现 OAuth2 Asp net 使用 | 更新日期: 2023-09-27 18:34:09

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

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

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

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

var medOK = new WebServerClient(GetAuthServerDescription(), clientIdentifier: "some client id");
medOK.ClientCredentialApplicator = ClientCredentialApplicator.PostParameter("some secret code");
// CallBack
var state = new AuthorizationState();
var uri = Request.Url.AbsoluteUri;
uri = RemoveQueryStringFromUri(uri);
state.Callback = new Uri(uri); 
var accessTokenResponse = medOK.ProcessUserAuthorization();
if (accessTokenResponse != null){
    //If you have accesstoek then do something 
} else if (this.AccessToken == null) {
    // If we don't yet have access, immediately request it.
    medOK.PrepareRequestUserAuthorization(state);
    medOK.RequestUserAuthorization();
}

还有一个回调页面(假设一个 ashx 页面),其中包含:

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

理智 ?(我尽量简洁,不要写下我尝试过的所有内容,但如果需要,我可以提供更多信息)

使用 Asp.net 4.0 实现 OAuth2

如果您

使用的是 4.5 或更高版本,请使用许多网站博客文章中所述的 Owin,并且如果您使用 Visual Studio 2013+ 模板创建 Asp.net 项目,您将有一个如何实现它的示例,如此处所述。或者你可以使用IdentityModel,它很容易使用。

对于.NET 4.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();
}

使用 GetAuthServer 描述 构建授权服务器说明

回调 url 的方法很简单(获取令牌),因为我没有找到如何将我需要发送到我的提供程序的确切参数。