首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拒绝ODataController BearerToken授权

拒绝ODataController BearerToken授权
EN

Stack Overflow用户
提问于 2015-04-08 13:51:39
回答 2查看 2.4K关注 0票数 1

我正在尝试为我的WebApi服务实现身份验证提供程序。我正在使用本指南:http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/进行测试,我在一个单独的webapi项目中实现了两个控制器:

代码语言:javascript
复制
public class TestApiController : ApiController
{
    [Authorize]
    public string Get()
    {
        return "Secure";
    }

    public string Get(int id)
    {
        return "Not Secure";
    }
} 

public class TestODataController : ODataController
{
    [Authorize]
    [EnableQuery]
    public HttpResponseMessage Get()
    {
       return new HttpResponseMessage(HttpStatusCode.OK); 
    }
}

我的目标是最终使用。

当我调用localhost:Port/api/TestApi并在标头中设置Bearer时,一切都正常。当我调用localhost:Port/odata/TestOData并添加令牌时,我收到消息:

这一请求的授权已被拒绝。

我是否在标头中设置标记并不重要。如果我移除授权属性,一切都可以正常工作。我用邮递员打电话给这些方法,如果有兴趣的话。目前,我正在使用来自visual studio的iis-express来托管控制器,但是iis已经配置好了,但是产生了相同的消息。

我的Startup.cs (有趣的部分.)

代码语言:javascript
复制
public void Configuration(IAppBuilder app)
{
    var config = new HttpConfiguration();

    ConfigureOAuth(app);

    FilterConfig.Register(config);
    ODataConfig.Register(config);
    WebApiConfig.Register(config);

    app.UseCors(CorsOptions.AllowAll);
    app.UseWebApi(config);
}

public void ConfigureOAuth(IAppBuilder app)
{
    //Token consumption
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
    {});
}

OData和WebConfig:

代码语言:javascript
复制
public class ODataConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<MyModel>("MyModel");

        var conventions = ODataRoutingConventions.CreateDefault();

        var route = config.Routes.MapODataRouteFixed(
            routeName: "ODataRoute",
            routePrefix: "odata",
            model: modelBuilder.GetEdmModel(),
            conventions: conventions) as Route;
    }
}

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}

要添加新用户的帐户控制器位于另一个项目中。数据库看起来很好,令牌生成也很好。它的代码与来自bitoftech演示的例子几乎相同。

我看不出这些控制器之间有什么区别。Auhtorize属性是由controller...but识别的,有些地方是错误的。如有任何提示,将不胜感激。

更新后,经过一些研究和第一个答案,我更新了我的启动值。旧选项仅用于令牌生成,而不是令牌消耗。但是api控制器仍然工作,OdataController抛出“授权拒绝”。

Update2现在起作用了。但我不太确定为什么。我从我的FilterConfig中删除了所有东西:

代码语言:javascript
复制
public class FilterConfig
{
    public static void Register(HttpConfiguration config)
    {
        //config.SuppressDefaultHostAuthentication();
        //config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
    }
}

但是我不知道为什么它以前和api控制器一起工作,而不是和odata控制器一起工作.

EN

回答 2

Stack Overflow用户

发布于 2015-04-08 14:05:21

如果您使用一个项目获取令牌,而另一个项目用于webApi,则两者在web.config中都必须具有相同的机器密钥。

在下面这个系列的下一篇文章中,您将解释如何做到这一点:从资源服务器中分离所有者授权服务器

示例:

代码语言:javascript
复制
<system.web>
...
<machineKey validationKey="57B449BBA8F9E656087FF7848727E122C5F5966F65AC0FC25FB3532193B59CFCD13B370883FFC184C1F1500638F33E6F67B37CAED1D9BC65BBC6CFFB232BFD0B" decryptionKey="6D9FBE88D16B3FA5B5E6B37460BBE50DA85D5B4C482159006B5A337C58AA9E79" validation="SHA1" decryption="AES" />
...
</system.web>
票数 0
EN

Stack Overflow用户

发布于 2015-10-17 02:50:50

我有类似的问题,并发现这个答案张贴在Telerik网站上,它对我有效。它需要将dataType设置为"json“。

代码语言:javascript
复制
transport: {
    type: "odata",
     read: {
         url: "http://........",
         dataType: "json",
         beforeSend: function (xhr) {
             var auth = 'Bearer ' + token;
             xhr.setRequestHeader('Authorization', auth);
         }
     },

 },

这是url:http://www.telerik.com/forums/odata-not-working-with-custom-authorization-header

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29516639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档