c# - OAuth 授权在 Azure 移动应用程序项目中返回 "Authorization has been denied for this request"

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

我在 .Net Web Api 项目中实现了 OAuth 授权,如下 this tutorial 。我需要做同样的事情,但是是在 Azure 移动应用程序项目中。它已发布,一切都像 Web Api 一样正常工作,直到我尝试验证对 Controller 的调用。当我添加授权属性并调用 api 时,我应该发送一个不记名 token 。请注意,我使用 PostMan 和我的 Web Api 项目来执行此操作,一切都很完美。但是,在 Azure 移动应用程序中,每次我使用正确的持有者 token 调用具有授权属性的 Controller 时,它都会返回“此请求的授权已被拒绝”错误。 Web api 项目和 azure 移动应用程序项目之间的代码完全相同,唯一的异常(exception)是在启动类中。

Web Api 启动.cs:

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

Azure 移动应用程序启动.cs:

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

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

我认为问题与ConfigureMobileApp 函数有关,因为它本身有一些身份验证代码,但我不确定。我不习惯启动类(class)。还是有点菜鸟。

因此,每次使用不记名 token 调用 Web API 项目都可以正常工作。每次使用不记名 token 调用 Azure 移动应用程序项目时,都会返回“此请求的授权已被拒绝”错误。

我能做些什么来解决这个问题???

谢谢!!

最佳答案

根据你的描述,我按照tutorial你提到要测试这个问题。根据您的代码,我假设您已经创建了Azure Mobile App应用程序。您可以尝试按如下方式更改您的Configuration方法:

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

注意: Startup.MobileApp.cs 中的 ConfigureMobileApp 方法调用了此 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 移动应用。

关于c# - OAuth 授权在 Azure 移动应用程序项目中返回 "Authorization has been denied for this request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42683273/

相关文章:

c# - 为什么我可以将枚举与 null 进行比较?

c# - 将记录写入数据库并且仅输入每个字段的第一个字符

c# - 如何安装额外的 .NET 库?

.net - 机器人对话框不等待

c# - 如何裁剪部分gif图像?

angularjs - Videogular 显示视频的开始时间和结束时间不正确

asp.net-mvc - Asp Identity 自定义上下文

c# - 如何以编程方式将现有 SSL 证书应用到 Azure Web 应用

c# - 以编程方式 (C#) 将 Excel 转换为图像

c# - 使用 ASP NET MVC 4 和 webapi 的自定义 http 处理程序和路由处理程序