【发布时间】:2020-03-01 18:32:22
【问题描述】:
我的场景就像我必须在 Azure Web App 中部署 Web API(.NET Framework),所有请求都应该通过 Azure AD 身份验证。我搜索了一下,发现微软提供了类似的案例。我遵循了 Microsoft 提供的以下示例,当我在机器上测试此代码时,它工作正常。
Native client to Web API to Web API.
就我而言,我能够生成 OAuth2 令牌,但问题是我总是收到 401 Unauthorized 错误。我关注了许多博客,但无法弄清楚导致问题的原因。非常感谢任何帮助。
我的代码是:
Startup.cs
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters { ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] }
});
}
Controller.cs
[Authorize]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class AuthController : ApiController
{
[HttpGet]
public HttpResponseMessage Get()
{
try
{
using (sqldbEntities entities = new sqldbEntities())
{
return Request.CreateResponse(HttpStatusCode.OK, (ConfigurationManager.AppSettings["GetMethod"]));
}
}
catch (Exception ex)
{
Log4net.log.Error(string.Format(ConfigurationManager.AppSettings["ErrorGetData"], ex.Message));
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message);
}
}
通过两种方式生成令牌: 方法 1) 从另一个 ASP.NET 应用程序
private static AuthenticationContext authContext = null;
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
Uri redirectUri = new Uri(ConfigurationManager.AppSettings["ida:RedirectUri"]);
private static string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
private static string todoListResourceId = ConfigurationManager.AppSettings["todo:TodoListResourceId"];
protected async void Button1_Click(object sender, EventArgs e)
{
authContext = new AuthenticationContext(authority);
AuthenticationResult result = null;
result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always));
TextBox1.Text = result.AccessToken;
}
方法 2) 来自邮递员 网址:https://login.microsoftonline.com/myad.onmicrosoft.com/oauth2/token
方法:POST
身体: grant_type=authorization_code&client_id=89479d4f-aaaa-4ebf-80f2-13e423431bfb&client_secret=hZ_8Ls1EmFarH_lPn4=aaaa-k8TJ_&redirect_uri=https://NAClient-OBO/&code=AQABAAIAAABeAFzDwllzTYGDLh_qYbH8KZRKktzMuxXp0hM6k1B__lWQrxaikd6wwrYrKZ470UAdr4g1GqAPWja6JgpqsDtLefE23vW80qP7xgVodury28LkGLzL1Mbq0auUeiBaaaa-oCZf11o5EsaSVRVlke6FMkbIn_ppA_GsEBhIAEjxHXXjkrIcp-e4g0G5t9prme4IZ0Sg2_L4MvN6TAyr-nEPGDlnWZLBkRvu8Izsm3RiI_cnneCi1xonZaKBSlsgONIwpgN1bOaz16OVW2uu5lTiz206CSrJtzWeKkitPNUx2Gnn-RnZcCUVDyLxK-eJy8o_ggn_iu7F7kdjKj-b70Gfp5BPYx6fxB4Zyw8tpnWzVkLG7IbLGx9di112u-UGgVSBfWQiO5w3a4Mx2KdDcUihMlVW_mgBUdQi4160AKq1Id9ZcpJEKCT11KWwkO25_q7huCxJ_6-mEU4ADCGjj8hDOtRLGNeZMwhB13rYTN7qGQMmpX491RoldCfpfevva16DhQl5VHbIqspknkK1pFHvh90J47DSg0VihQOIQp1FZ7EgAA&resource=89479d4f-aaaa-4ebf-80f2-13e423431bfb
请帮忙。
【问题讨论】:
-
您还有其他顾虑吗?
-
谢谢吉姆。它有帮助。
标签: c# azure azure-devops azure-active-directory azure-web-app-service