【问题标题】:OAuth in asp.net MVC projectsasp.net MVC 项目中的 OAuth
【发布时间】:2015-01-15 12:40:01
【问题描述】:

我怎么会在网上看到这两个?有什么区别吗?

var OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    AuthorizeEndpointPath = new PathString("/Account/Authorize"),
    Provider = new SimpleAuthorizationServerProvider(UserRepository, UserStore),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    AllowInsecureHttp = true
};
app.UseOAuthBearerTokens(OAuthOptions);

和

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
    AllowInsecureHttp = true,

    TokenEndpointPath = new PathString("/token"),
    AccessTokenExpireTimeSpan = TimeSpan.FromHours(8),

    Provider = new SimpleAuthorizationServerProvider(UserRepository, UserStore)
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

UseOAuthBearerTokens这个方法怎么会接受OAuthAuthorizationServerOptions作为参数呢?

【问题讨论】:

  • 好问题。我不知道是不是只有我一个人,但我认为 ASP.NET 当前状态的整个 Authorization/Authentication/OAuth 部分绝对是一团糟。
  • 人们是否推荐使用其他东西?

标签: c# asp.net asp.net-mvc oauth


【解决方案1】:

我相信第一个 UseOAuthBearerTokens(options) 是在 Web API 2.1 中添加的,它封装了对 UseOAuthAuthorizationServer 和 UseOAuthBearerAuthentication 的调用。

不幸的是,网络上的文章/博客中的许多示例都没有包含发布日期,因此很难跟踪代码是否仍然适用。考虑到这些 API 的更新速度,我认为它不会变得那么混乱。

这是 Microsoft.Owin.Security 包中的 Owin.AppBuilderExtensions.cs 中的代码,供参考,截至 Web Api v2.2:

public static void UseOAuthBearerTokens(this IAppBuilder app, OAuthAuthorizationServerOptions options)
        {
            if (app == null)
            {
                throw new ArgumentNullException("app");
            }
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            app.UseOAuthAuthorizationServer(options);

            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
            {
                AccessTokenFormat = options.AccessTokenFormat,
                AccessTokenProvider = options.AccessTokenProvider,
                AuthenticationMode = options.AuthenticationMode,
                AuthenticationType = options.AuthenticationType,
                Description = options.Description,
                Provider = new ApplicationOAuthBearerProvider(),
                SystemClock = options.SystemClock
            });

            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
            {
                AccessTokenFormat = options.AccessTokenFormat,
                AccessTokenProvider = options.AccessTokenProvider,
                AuthenticationMode = AuthenticationMode.Passive,
                AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
                Description = options.Description,
                Provider = new ExternalOAuthBearerProvider(),
                SystemClock = options.SystemClock
            });
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2016-02-05
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多