我有一个单一的租户云服务,我想只能访问我公司的员工。该解决方案具有Web角色和辅助角色。
的Web.Config
<add key="ida:Tenant" value="MyCompany.onmicrosoft.com" />
<add key="ida:Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<add key="ida:ClientID" value="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<add key="ida:Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:44322/" />
另外,我在Cloud.config中获得了相同的设置:
<Setting name="ida.Tenant" value="MyCompany.onmicrosoft.com" />
<Setting name="ida.Audience" value="https://MyCompany.onmicrosoft.com/MySolutionWebRole" />
<Setting name="ida.ClientID" vvalue="44421xxx-xxxx-xxxx-xxxx-xxxxxxx7024" />
<Setting name="ida.Password" value="i6fMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4Yk=" />
<Setting name="ida.AADInstance" value="https://login.microsoftonline.com/{0}" />
<Setting name="ida.PostLogoutRedirectUri" value="https://localhost:44322/" />
转到Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
}
}
});
}
最后,我在控制器中设置了[Authorize]标签。
在Azure Active Directory设置中,我已经注册了我的cloudservice。 应用程序类型是Web app / API,Multi-tenanted是“No”。注销网址设置为https://localhost:44322/Account/EndSession。我没有更改或编辑Manifest。
当我尝试进入云端服务时,我被重定向到我的组织登录页面(到目前为止一直都很好),但输入密码后我收到了一条错误消息。
我们在登录时遇到问题。我们收到了非法请求。 (自由翻译)
相关ID:21f4089f-1952-4f57-aead-173a66c1408d时间戳: 2016-09-26 10:24:14Z AADSTS90093:此应用程序需要 应用程序权限到另一个应用同意 应用程序权限只能由管理员执行。 退出并以管理员身份登录或与您联系 组织的管理员。
登录请求的网址如下(我输入密码的地方);
https://login.microsoftonline.com/ fd2xxxxx-xxxx-xxxx-xxxxxxxf3f2 / 的oauth2 /授权?CLIENT_ID = 444xxxxx-XXXX-XXXX-xxxxxxxx024 &安培; REDIRECT_URI = HTTPS%3A%2F%2flocalhost%3a44322%2F &amp; response_mode = form_post&amp; response_type = code + id_token &安培;范围= +的OpenID轮廓&安培;状态= OpenIdConnect.AuthenticationProperties %3dYkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
我一直在寻找基于Web应用程序的两个示例解决方案 https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect和 https://github.com/Azure-Samples/active-directory-dotnet-webapp-multitenant-openidconnect
我非常感谢你对这件事的任何帮助
答案 0 :(得分:0)
Turnes out我必须在Azure Active Directory App注册中编辑我的清单:
"requiredResourceAccess": [
{
"resourceAppId": "00000002-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "311a71xxxx-xxxx-xxxx-xxxx7156d8e6",
"type": "Scope"
},
{
"id": "5778995axxxx-xxxx-xxx-xxxx63a9f3f4d04",
"type": "Role"
}
当我删除最后一个条目(角色,可能是工作者角色)时,我有一个屏幕提示我是否要授予Azure AD配置文件的应用程序读取权限。在回答OK后,我被转发到localhost:44322,带有404.解决方法是从配置文件中删除postLogoutRedirectUri键,以及删除Startup.Auth.cs中的两行
//PostLogoutRedirectUri = postLogoutRedirectUri,
//RedirectUri = postLogoutRedirectUri,
现在它按预期工作:)