Azure 移动应用程序项目中的 OAuth 授权 returns "Authorization has been denied for this request"
OAuth authorization returns "Authorization has been denied for this request" in a Azure Mobile App project
我在 this tutorial 之后的一个 .Net Web Api 项目中实现了 OAuth 授权。我需要做同样的事情,但在 Azure 移动应用程序项目中。它已发布并且一切都像 Web Api 一样正常工作,直到我尝试验证我对控制器的调用。当我添加授权属性并调用 api 时,我应该发送不记名令牌。请注意,我在我的 Web Api 项目中使用 PostMan 来执行此操作,并且一切正常。但是,在 Azure 移动应用程序中,每次我使用正确的不记名令牌调用具有授权属性的控制器时,它都会返回 "authorization has been denied for this request" 错误。 Web api 项目和 Azure 移动应用程序项目之间的代码完全相同,唯一的例外是在启动 class 中。
网络 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 函数有关,因为它本身有一些验证码,但我不确定。我不习惯启动class。还是有点菜鸟。
因此,使用不记名令牌对网络 api 项目的每次调用都可以正常工作。每次使用不记名令牌调用 Azure 移动应用程序项目时,都会返回 "authorization has been denied for this request" 错误。
我该怎么做才能解决这个问题???
谢谢!!
根据你的描述,我按照你说的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!";
}
}
结果
此外,Azure Mobile Apps 使用 App Service Authentication / Authorization 来保护您的移动后端,有关更多详细信息,您可以参考此官方document. Also, you could refer to Adrian Hall's blog以更好地了解 Azure Mobile Apps。
我在 this tutorial 之后的一个 .Net Web Api 项目中实现了 OAuth 授权。我需要做同样的事情,但在 Azure 移动应用程序项目中。它已发布并且一切都像 Web Api 一样正常工作,直到我尝试验证我对控制器的调用。当我添加授权属性并调用 api 时,我应该发送不记名令牌。请注意,我在我的 Web Api 项目中使用 PostMan 来执行此操作,并且一切正常。但是,在 Azure 移动应用程序中,每次我使用正确的不记名令牌调用具有授权属性的控制器时,它都会返回 "authorization has been denied for this request" 错误。 Web api 项目和 Azure 移动应用程序项目之间的代码完全相同,唯一的例外是在启动 class 中。
网络 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 函数有关,因为它本身有一些验证码,但我不确定。我不习惯启动class。还是有点菜鸟。
因此,使用不记名令牌对网络 api 项目的每次调用都可以正常工作。每次使用不记名令牌调用 Azure 移动应用程序项目时,都会返回 "authorization has been denied for this request" 错误。
我该怎么做才能解决这个问题???
谢谢!!
根据你的描述,我按照你说的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!";
}
}
结果
此外,Azure Mobile Apps 使用 App Service Authentication / Authorization 来保护您的移动后端,有关更多详细信息,您可以参考此官方document. Also, you could refer to Adrian Hall's blog以更好地了解 Azure Mobile Apps。