我要解决的场景如下。
1)用户可以使用标准方法针对我的本地数据库进行身份验证-可以正常工作
2)用户可以通过社交媒体平台进行身份验证-工作正常
3)现在,我希望具有Azure AD帐户的某些用户能够拥有本地帐户BUT,并通过其Azure AD进行身份验证。有(1)和(2)的解决方案。但是我找不到能同时支持这三个方面的解决方案。最接近的是多租户SaaS身份验证
对于那些应该通过AD进行身份验证的用户,将在系统中对其进行预配置。(我将在我的本地数据库中拥有他们的TenantID,ClientID等)。因此,根据他们的用户名,如果我可以重定向到相关的登录页面,则我应该能够支持其他广告。
我不确定如何正确连接(或者这种方法是否错误/可行)。
authentication asp.net-identity azure-active-directory asp.net-core-2.0
请注意,我尝试使用 docker 桌面在本地构建此文件,而不是在 Azure CI/CD 管道中构建。
我已经使用https://github.com/microsoft/artifacts-credprovider开始了这个过程,但这也不起作用,后来发现新的 dotnet 恢复可以完成它的工作。因此,参考https://github.com/microsoft/artifacts-credprovider/issues/220后尝试了以下方法
以下是我尝试过的步骤。
我已经生成了 PAT。
下面是我的 docker 文件。
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyProj.csproj", "."]
COPY . .
WORKDIR "/src/."
ARG PAT
ARG FEED_URL
ENV NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED true
RUN dotnet nuget add source "${FEED_URL}" -u "noneed" -p "${PAT}" --store-password-in-clear- text --valid-authentication-types basic
RUN dotnet restore "./MyProj.csproj"
RUN dotnet build "MyProj.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyProj.csproj" -c …Run Code Online (Sandbox Code Playgroud) 我正在使用PHPUnit和Selenium2服务器.我正在使用PageObject模式.对于页面对象,我获得了webdriver的实例并执行必要的功能.
为了保持单个浏览器运行,我实现了一个粗略的解决方案,我在网络中找到了我在静态类中初始化驱动程序:
class SessionHelper {
public static $first;
}
SessionHelper::$first = 0;
Run Code Online (Sandbox Code Playgroud)
然后在我的测试用例类setup()方法中;
public function setUp(){
if (SessionHelper::$first == 0 )
{
$this->setHost('localhost');
$this->setPort((int)4444);
$this->setBrowser('firefox');
$this->setBrowserUrl('http://domain.com/lucky/web');
$this->shareSession(TRUE);
$this->prepareSession();
SessionHelper::$first = 1 ;
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以在一个浏览器中执行所有测试.但是,如果一个测试用例失败; 通过尝试查找不存在的元素,所有其他测试用例都失败并显示消息"Undefined index:browserUrl".如果我更改它以在页面中查找已知元素,它可以正常工作.所以例如;
test_method_1:如果在此测试失败后未找到任何元素,则显示"Undefined index:browserUrl".
如果test_method_1正常,则其他测试将执行,直到另一个测试用例失败.
那么,我可能会得到这个错误的原因是什么?当一个测试用例失败时,我的会话会被销毁吗?
我的应用程序具有可为空的数据字段。例如,两个日期字段PublishOn和ExpiresOn。它们都可以为null或具有有效日期。
在客户端,我有一个带有匹配字段的对象,该字段填充了来自Web API的数据。但是当我绑定数据如下
<input class="form-control" type="text" name="Title" [(ngModel)] = "entity.PublishOn">
Run Code Online (Sandbox Code Playgroud)
当PublishOn属性具有值时,它可以正常工作。如果为null,则失败。我知道我可以在获取数据后将任何null值转换为空字符串或其他内容,但是想知道为什么Angular在这种情况下不灵活吗?我的意思是,如果存在绑定的值,并且其为空/空值,则照原样保留。
Angular处理这种情况的方法是什么?
更新-1
但是,每次运行时,都会给我一个例外:“有多个自定义值访问器与具有未指定名称属性的表单控件匹配”,我有一个简单的要求。那是在控制它的绑定值之前,应该检查是否为空。如果为null,则应返回一个空字符串!
Azure AD身份验证通过Visual Studio在本地运行良好.出版后; 我转到URL(https://mydomain.azurewebsites.net/),它被重定向到登录页面.此时地址栏的数据低于数据(注意:某些敏感数据已被删除).
https://login.microsoftonline.com/guid/oauth2/authorize?response_type=code id_token&redirect_uri = https://mydomain.azurewebsites.net/.auth/login/aad/callback&client_id = myclientid&scope = openid profile email&response_mode = form_post&nonce = noncevalue&状态=导向=%2F
现在有两个问题与上面的数据
第一个问题,这里提到的client_id = myclientid不再存在,我已将其从目录中删除.我为这个客户端ID搜索我的代码(find-in-file),以确保我没有错误地引用它.我在代码中找不到引用.
然后我复制了正确的client_id,替换为上面的url并重试.此时它让我登录并显示错误的请求消息.
第二个问题重定向网址https://mydomain.azurewebsites.net/.auth/login/aad/callback不是我配置的!!!(我把它设置为https://mydomain.azurewebsites.net)Azure有附加.auth/login/aad/callback部分
这肯定是一个配置问题.
以前有人遇到过这种问题吗?
这是在我根据这篇文章定制了asp.net核心身份服务以支持多租户之后发生的。我简化了它以满足我的需求。
这是我的基本设置。
1) 自定义应用用户
public class ApplicationUser : IdentityUser<int>, IEntityBase{}
Run Code Online (Sandbox Code Playgroud)
2) 自定义角色
public class ApplicationRole : IdentityRole<int>, IEntityBase{}
Run Code Online (Sandbox Code Playgroud)
3) 自定义角色存储
public class RoleStoreMultiTenant<TRole> : RoleStore<TRole, ApplicationDbContext, int>{}
Run Code Online (Sandbox Code Playgroud)
4) 自定义用户存储
public class UserStoreMultiTenant<TUser, TRole, TKey> : UserStore<TUser, TRole, ApplicationDbContext, int>{}
Run Code Online (Sandbox Code Playgroud)
5)我的角色服务从上面(3)继承。这只是为了将我的代码与 RoleStore 覆盖的代码分开。
public class ApplicationRoleStore : RoleStoreMultiTenant<ApplicationRole>{}
Run Code Online (Sandbox Code Playgroud)
6)从上面(4)继承的我的用户服务。这只是为了将我的代码与 UserStore 覆盖的代码分开。
public class ApplicationUserStore : UserStoreMultiTenant<ApplicationUser, ApplicationRole, int>{}
Run Code Online (Sandbox Code Playgroud)
7) 我的 ApplicationDbContext 是;
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int>{}
Run Code Online (Sandbox Code Playgroud)
8) 我与身份相关的启动配置(在 ConfigureServices 中)。
services.AddScoped<IRoleStore<ApplicationRole>, ApplicationRoleStore>();
services.AddScoped<IUserStore<ApplicationUser>, ApplicationUserStore>();
services.AddIdentity<ApplicationUser, ApplicationRole>(o …Run Code Online (Sandbox Code Playgroud)