将MVC应用程序扩展到REST

时间:2015-06-11 20:24:53

标签: asp.net-mvc rest

我想我可能说错了这个问题。我目前拥有的是一个MVC Web应用程序(默认情况下)使用承载令牌。这一切都很好,但如果我想与Web应用程序之外的任何这些API进行通信,我想使用REST客户端。但是,我找不到生成承载令牌的方法/调用Login方法并获取一个承载令牌,以便在后续请求中用作授权头。

我希望拥有:

POST /帐户/登录 返回:令牌

POST /产品/创建 令牌标题 身体要求 返回:成功或失败

ETC。所有这些都不会丢失网站的现有功能。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

/Token端点已经提供了在WebAPI方法上使用[Authorize]所需的所有功能。完成这项工作的一般过程如下:

  1. 客户端向http://somesite.com/Token建立POST请求。 Content-Type标头应包含x-www-form-urlencoded。有效载荷主体应包括grant_type=password&username="username"&password="password"grant_type值表示我们正在提供密码以换取访问令牌。

  2. 服务器响应可以是HTTP 403HTTP 200。如果是HTTP 200,则回复正文将包含access_tokentoken_typebearer)和expires_in

  3. 客户端可选地存储此access_token以供将来访问,然后向受保护服务器资源建立新请求,包括标头Authorization,该请求将为Bearer access_token。此格式很重要,必须以Bearer空格开头,然后是access_token值。

  4. 请注意,这不会考虑跨源请求(CORS)或HTTPS的问题。无论何时发送用户名或密码,都应制定适当的安全措施,如此处的步骤1所述。

    默认情况下,在具有Identity的任何新MVC5项目上配置此项。您将找到类似于以下内容的Startup类:

    public partial class Startup
    {
        // Enable the application to use OAuthAuthorization. You can then secure your Web APIs
        static Startup()
        {
            PublicClientId = "web";
    
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/Token"),
                AuthorizeEndpointPath = new PathString("/Account/Authorize"),
                Provider = new ApplicationOAuthProvider(PublicClientId),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                AllowInsecureHttp = true
            };
        }
    

    TokenEndpointPath表示令牌请求的路径,AuthorizeEndpointPath表示使用外部登录(Facebook,Twitter,Google等)时使用的路径。有关默认模板的详细信息,请参阅this Microsoft article

    这个过程的更详细的步骤和用Angular.js编写的完整客户端应用程序可以在Taiseer Joudeh的a blog找到。