在Web Api中使用邮递员授权进行属性身份验证

时间:2017-03-23 13:08:18

标签: asp.net-web-api asp.net-web-api2 postman

我正在使用RESTful服务,并将Postman作为GET,POST和测试API的最佳插件之一。

我在邮递员中找到了Basic Auth,No Auth,DIgest Auth,OAuth,AWS。如何测试授权控制器和方法。

我知道授权属性检查user.Identity.IsAuthenticated

我不确定如何使用Postman

在具有特定角色的控制器和方法中传递授权
[Authorize(Roles = "Admin, Super User")]

public ActionResult AdministratorsOnly()
{
    return View();
}

这是我的启动文件

  public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public static string PublicClientId { get; private set; }

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context and user manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        // Configure the application for OAuth based flow
        PublicClientId = "self";
        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
            // In production mode set AllowInsecureHttp = false
            AllowInsecureHttp = true
        };

        // Enable the application to use bearer tokens to authenticate users
        app.UseOAuthBearerTokens(OAuthOptions);         
    }

2 个答案:

答案 0 :(得分:6)

<强> 1。在web api中启用CORS

在Startup.cs配置方法中将以下内容附加到IAppBuilder(如果遇到问题,请在此处阅读更多内容How to make CORS Authentication in WebAPI 2?

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

Nuget package here

<强> 2。通过Postman获取令牌

enter image description here

第3。使用令牌并从网络API

获取数据

注意:令牌响应包含access_token,它是令牌,token_type是承载。在请求中使用时,在Authorization http标头的值之间添加一个空格。在请求到达请求的控制器中的[Authorize]属性之前,auth服务器将解析令牌并设置user.Identity

enter image description here

此外,请确保ApplicationOAuthProvider将包含当前角色的声明身份添加到令牌。否则请求将被拒绝。测试它的一种方法是只使用没有角色的[Authorize]属性,看看邮递员是否可以访问控制器

答案 1 :(得分:1)

看起来您正在使用Windows身份提供程序并使用OAuth 2.0(web api 2模板的默认设置)。而且你也不会在使用邮递员时发挥作用。授权由框架根据用户声明处理。

<强>解释

当您使用/ Token端点的用户名和密码进行身份验证时,您将获得一个不记名令牌和一个声明,其中包含您的身份信息,包括您的角色(更像是您的护照/身份证)。您将使用您的持有人令牌来访问授权资源,您将根据与之关联的角色被授予或拒绝。

它是如何知道的?

在数据库中,当您第一次启动应用程序时,asp.net标识已自动创建了用户,角色,externalLogin等所需的表格以及前缀aspnet。您需要做的是创建用户,创建角色并将用户分配给具有aspnet身份提供的角色。 然后使用authorize属性装饰您的资源,并使用postman发出请求,只有持有者令牌(当您成功登录/ token端点时获得的那些)

您可以参考here进一步说明。