在 web api 中验证 Thinktecture OAuth 令牌

Posted

技术标签:

【中文标题】在 web api 中验证 Thinktecture OAuth 令牌【英文标题】:Validate Thinktecture OAuth Token in web api 【发布时间】:2014-12-25 11:21:28 【问题描述】:

我正在尝试使用 Thinktecture 身份服务器来保护带有 angularjs 前端的 Web api。我可以使用以下代码通过 api 控制器从 Identity Server 获取 OAuth 令牌:

    [HttpPost]
    public async Task<JObject> LogOn(UserModel userModel)
    
        System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate  return true; ;

        var client = new OAuth2Client(
            new Uri("https://identity.app.net/issue/oauth2/token"),
            "dd",
            "secret");

        var result =
            await
                client.RequestResourceOwnerPasswordAsync(userModel.UserName, userModel.Password,
                    @"http://my.app.net/");
        return result.Json ;
    

这会返回一个令牌。如果令牌在请求的标头中传递,我似乎无法弄清楚如何让 [Authorize] 标记工作。

【问题讨论】:

你得到什么错误? 【参考方案1】:

老问题 - 我希望你能找到答案?

您需要将令牌作为不记名令牌添加到调用 Web api 的客户端。从 .Net 客户端它会是这样的(其中“令牌”将是您调用 RequestResourceOwnerPasswordAsync 的“结果”):

var client = new HttpClient();    
client.SetBearerToken(token);
var response = client.GetStringAsync(<yourUrl>).Result;

在 Angular 中你可能需要拦截一些东西(我不是一个前端的人 ;-)): http://www.codeproject.com/Articles/784106/AngularJS-Token-Authentication-using-ASP-NET-Web-A

【讨论】:

以上是关于在 web api 中验证 Thinktecture OAuth 令牌的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在所有 api 路由中使用 Web 身份验证重定向到主页

在 web api 中验证 Thinktecture OAuth 令牌

Web Api 如何在隐式(或授权)授权流(OpenId)中验证令牌?

在 ASP.NET Web API 中处理 ModelState 验证

在 RESTful Web API 中验证后续请求的令牌签名

动态 Web 项目中的谷歌日历 api (java) 身份验证错误