OAuth 不记名令牌认证授权码
OAuth bearer token authentication authorisation code
目前,我们的 ASP.NET MVC 系统使用 OpenIdConnect 和 cookie 身份验证进行保护。我们已经使用 azure 活动目录启用了 oauth 身份验证流程。
public void ConfigureAuthOpenIdConnect(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
var cookieAuthenticationOptions = new CookieAuthenticationOptions()
{
//...
};
app.UseCookieAuthentication(cookieAuthenticationOptions);
var notifications = new OAOpenIdConnectAuthenticationNotifications();
var openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions()
{
//...
Notifications = notifications
};
app.UseOpenIdConnectAuthentication(openIdConnectAuthenticationOptions);
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigHelper.ClientSettings.TenantName,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigHelper.ClientSettings.ClientId
}
});
}
现在,当我们通过 OpenIdConnect 进行身份验证时,我们使用 OpenIdConnectAuthenticationOptions
选项上的自定义 Notifications
检索授权代码,这使我们能够使用 ADAL 请求和缓存资源令牌。
当有人尝试使用 azure AD 持有者令牌访问我们的系统时出现问题,此获取和缓存资源令牌的工作流程不存在。
所以我的问题是,如何使用不记名令牌启用它?我如何请求额外的资源令牌,就像我们使用 OpenIdConnect 所做的那样?是否可以使用 ADAL 从不记名令牌中获取授权码?
正如您所提到的,您正在使用 OpenID Connect ASP.NET 中间件和 ADAL .NET 来使用 Azure AD 进行登录,然后在登录用户的身份下调用 Web API OnAuthorizationCodeReceived
OpenID 连接通知。
在这种情况下,您可以使用授权码来交换特定资源的访问令牌。
另一方面,当客户端应用程序使用 azure AD 承载令牌访问您的系统时,没有授权代码。在这种情况下,如果您想使用该访问令牌将其交换为另一个资源的访问令牌,例如 Microsoft Graph,您可以使用 OAuth 2.0 On-Behalf-Of flow。 OAuth 2.0 On-Behalf-Of 流程服务于应用程序调用 service/web API 的用例,后者又需要调用另一个 service/web API.
有关协议在这种情况下如何工作的更多信息,请参阅 Authentication Scenarios for Azure AD and On-Behalf-Of flow tutorial。
当然,您可以使用 ADAL.NET 来执行 On-Behalf-Of 流程,请参阅 this code sample。
目前,我们的 ASP.NET MVC 系统使用 OpenIdConnect 和 cookie 身份验证进行保护。我们已经使用 azure 活动目录启用了 oauth 身份验证流程。
public void ConfigureAuthOpenIdConnect(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
var cookieAuthenticationOptions = new CookieAuthenticationOptions()
{
//...
};
app.UseCookieAuthentication(cookieAuthenticationOptions);
var notifications = new OAOpenIdConnectAuthenticationNotifications();
var openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions()
{
//...
Notifications = notifications
};
app.UseOpenIdConnectAuthentication(openIdConnectAuthenticationOptions);
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigHelper.ClientSettings.TenantName,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigHelper.ClientSettings.ClientId
}
});
}
现在,当我们通过 OpenIdConnect 进行身份验证时,我们使用 OpenIdConnectAuthenticationOptions
选项上的自定义 Notifications
检索授权代码,这使我们能够使用 ADAL 请求和缓存资源令牌。
当有人尝试使用 azure AD 持有者令牌访问我们的系统时出现问题,此获取和缓存资源令牌的工作流程不存在。
所以我的问题是,如何使用不记名令牌启用它?我如何请求额外的资源令牌,就像我们使用 OpenIdConnect 所做的那样?是否可以使用 ADAL 从不记名令牌中获取授权码?
正如您所提到的,您正在使用 OpenID Connect ASP.NET 中间件和 ADAL .NET 来使用 Azure AD 进行登录,然后在登录用户的身份下调用 Web API OnAuthorizationCodeReceived
OpenID 连接通知。
在这种情况下,您可以使用授权码来交换特定资源的访问令牌。
另一方面,当客户端应用程序使用 azure AD 承载令牌访问您的系统时,没有授权代码。在这种情况下,如果您想使用该访问令牌将其交换为另一个资源的访问令牌,例如 Microsoft Graph,您可以使用 OAuth 2.0 On-Behalf-Of flow。 OAuth 2.0 On-Behalf-Of 流程服务于应用程序调用 service/web API 的用例,后者又需要调用另一个 service/web API.
有关协议在这种情况下如何工作的更多信息,请参阅 Authentication Scenarios for Azure AD and On-Behalf-Of flow tutorial。 当然,您可以使用 ADAL.NET 来执行 On-Behalf-Of 流程,请参阅 this code sample。