我有一个单页应用程序,该应用程序与我尝试使用Azure Active Directory保护的Web API进行通信。在使用带有本地帐户和OAuth2的本地SQL数据库之前,我已经完成了此操作,但是我从未使用Azure Active Directory完成它。
我在Visual Studio 2017中创建了一个新的MVC Web API项目,并将身份验证部分设置为“云-单一组织”,然后输入了相应的域。我在创建过程中登录了API。我提供的登录信息已输入到Web.Config文件中。
<appSettings>
<add key="ida:Tenant" value="domain.net" />
<add key="ida:Audience" value="domain.net/WebAPI" />
<add key="ida:ClientID" value="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" />
<add key="ida:Password" value="XXXXXXXXXXXXXXXXXXXXXXXXXXX" />
</appSettings>
然后在新的Startup.Auth.cs文件中,我具有以下内容:
public partial class Startup
{
// For more information on configuring authentication, please visit https://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
}
}
我看不到可以在其中启动登录的路径。在我的原始项目中,是/ Token路径,如下所示从我的原始Startup.Auth.cs文件中显示。
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(12),
RefreshTokenProvider = new ApplicationRefreshTokenProvider(),
};
在我的原始项目中,为了启动登录,我将在Ajax调用中使用/ Token并传递用户名和密码。
$.ajax({
url: url.getURL() + '/token',
method: 'POST',
data: {
username: username,
password: password,
grant_type: 'password'
},
如何在使用Azure Active Directory的新Web API中启动登录?我在Startup.Auth.cs文件中没有看到/ token路径或类似的东西。这是我必须添加的东西吗,还是项目设置为自动使用我在首次创建项目时输入的登录凭据?
答案 0 :(得分:0)
将Web API绑定到Azure Active Directory中时,没有可调用的“ /令牌” URL来启动登录。您必须将用户定向到以下网站:
http://login.microsoftonline.com/ {domain} /oauth2/v2.0/authorize?client_id= {client_id}&response_type = id_token&scope = openid&response_mode = fragment&state = 12345&nonce = 678910
确保您输入的应用程序的实际域和client_id变量在Azure中列出。另外,在Azure中,确保设置了“回复URL”。登录完成后,API将重定向回您的站点。这确实适用于localhost。