我想我可能说错了这个问题。我目前拥有的是一个MVC Web应用程序(默认情况下)使用承载令牌。这一切都很好,但如果我想与Web应用程序之外的任何这些API进行通信,我想使用REST客户端。但是,我找不到生成承载令牌的方法/调用Login方法并获取一个承载令牌,以便在后续请求中用作授权头。
我希望拥有:
POST /帐户/登录 返回:令牌
POST /产品/创建 令牌标题 身体要求 返回:成功或失败
ETC。所有这些都不会丢失网站的现有功能。
感谢您的帮助!
答案 0 :(得分:2)
/Token
端点已经提供了在WebAPI方法上使用[Authorize]
所需的所有功能。完成这项工作的一般过程如下:
客户端向http://somesite.com/Token
建立POST请求。 Content-Type
标头应包含x-www-form-urlencoded
。有效载荷主体应包括grant_type=password&username="username"&password="password"
。 grant_type
值表示我们正在提供密码以换取访问令牌。
服务器响应可以是HTTP 403
或HTTP 200
。如果是HTTP 200
,则回复正文将包含access_token
,token_type
(bearer
)和expires_in
。
客户端可选地存储此access_token
以供将来访问,然后向受保护服务器资源建立新请求,包括标头Authorization
,该请求将为Bearer access_token
。此格式很重要,必须以Bearer
和空格开头,然后是access_token
值。
请注意,这不会考虑跨源请求(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找到。