OAuth授权在Azure移动应用程序项目中返回“此请求的授权已被拒绝”

时间:2017-03-08 22:38:08

标签: c# .net asp.net-web-api oauth azure-mobile-services

我在this tutorial之后的.Net Web Api项目中实施了OAuth授权。我需要做同样的事情,但是在Azure移动应用程序项目中。它已发布,一切正常,就像Web Api一样,直到我尝试验证我对控制器的调用。当我添加authorize属性并调用api时,我应该发送一个bearer令牌。请注意,我使用PostMan和我的Web Api项目进行此操作,一切都很完美。但是,在Azure移动应用程序中,每次使用权限承载令牌调用具有authorize属性的控制器时,它都会返回“此请求的授权已被拒绝”错误。 web api项目和azure移动应用程序项目之间的代码与启动类中唯一的例外完全相同。

Web Api startup.cs:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
)

Azure移动应用程序startup.cs:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {

        ConfigureMobileApp(app);
        ConfigureAuth(app);
    }
}

我认为问题与ConfigureMobileApp功能有关,因为它本身有一些身份验证代码,但我不确定。我不习惯启动课程。还是有点像菜鸟。

因此,使用持票令牌对Web api项目的每次调用都可以正常工作。每次使用承载令牌调用azure移动应用程序项目时,都会返回“此请求已被拒绝授权”错误。

我该怎么做才能解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

根据您的说明,我按照您提到的tutorial来测试此问题。根据您的代码,我假设您已创建Azure Mobile App应用程序。您可以尝试更改Configuration方法,如下所示:

public void Configuration(IAppBuilder app)
{
    ConfigureAuth(app);
    ConfigureMobileApp(app);
}

注意: ConfigureMobileApp中的Startup.MobileApp.cs方法称为此app.UseWebApi(config);,因此您需要在此代码之前初始化中间件。

这是我的代码段,您可以参考它。

<强> Startup.OAuth.cs

public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

static Startup()
{
    OAuthOptions = new OAuthAuthorizationServerOptions
    {
        TokenEndpointPath = new PathString("/token"),
        Provider = new OAuthAppProvider(),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(2),
        AllowInsecureHttp = true
    };
}

public void ConfigureAuth(IAppBuilder app)
{   
    app.UseOAuthAuthorizationServer(OAuthOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

<强> Startup.MobileApp.cs

public static void ConfigureMobileApp(IAppBuilder app)
{
    HttpConfiguration config = new HttpConfiguration();

    new MobileAppConfiguration()
        .AddMobileAppHomeController()
        .MapApiControllers() //provides custom API capabilities for WebAPI controllers decorated with the [MobileAppController] attribute
        .ApplyTo(config);

    app.UseWebApi(config);
}

<强> ValuesController.cs

// Use the MobileAppController attribute for each ApiController you want to use  
// from your mobile clients 
[MobileAppController]
[Authorize]
public class ValuesController : ApiController
{
    // GET api/values
    public string Get()
    {
        return "Hello World!";
    }
}

<强>结果

enter image description here

enter image description here

此外,Azure移动应用程序使用应用程序服务身份验证/授权来保护您的移动后端,有关详细信息,您可以参考此官方document。此外,您可以参考Adrian Hall的blog以更好地了解Azure移动应用程序。