小编Vic*_*c K的帖子

AWS cognito:使用usernam/password或facebook登录

我想集成一个非常标准的功能:为用户(移动和网络)提供选项,使用电子邮件/密码登录或使用RBAC的Facebook(谷歌)帐户(不同的用户可能有不同的角色,如用户,版主,管理员,创作者等).这基本上是我想要的登录:

在此输入图像描述

我浏览了许多AWS教程和其他材料.我掌握了如何实现它,但我仍然没有完整的图片.希望有人可以帮助我.

这是我目前的理解(请纠正我,我错了).

1)对于电子邮件/密码注册/登录我使用用户池.当用户登录时,我调用authenticateUser(我正在使用JS SDK):

cognitoUser.authenticateUser(authenticationDetails, {
..
})
Run Code Online (Sandbox Code Playgroud)

在哪里onSuccess

  • 我存储身份,访问和刷新令牌,因此,用户不必每次都输入他的凭据
  • 因为用户将访问AWS服务(例如S3),所以我将idToken交换为AWS凭证
  • 在访问资源时,将AWS信用卡存储在LocalStore中以供进一步使用

2)对于facebook登录,我使用联合身份

  • 获取facebook访问令牌
  • 使用fb令牌获得认知身份
  • 将认知身份与AWS信用交换,并将其存储在LocalStore中

问题:

Q1.注册/登录是否有效且相当完整?我错过了什么吗?

Q2.我应该如何存储Facebook用户?我可以在用户池中执行此操作吗?我的印象是它不可能,但这意味着我有2个不同的用户目录:一个在UserPool中,另一个在另一个地方(比如说在DynamoDB中)

Q3.如果我必须将用户存储在不同的地方(UserPool和DynamoDB),这意味着我有2个用户,基本上是一个用户,谁首先注册了电子邮件/密码,然后决定使用Facebook - 这对我作为应用管理员和用户都不方便.如何应对这种情况?

Q4.如何管理使用facebook令牌登录的用户组(如用户,版主,管理员,创建者等)?

Q5.对于Facebook登录用户,我应该如何限制对AWS以外的资源的访问?

Q6.这有什么实际的例子吗?

谢谢!

amazon-web-services facebook-login amazon-cognito amazon-cognito-facebook aws-cognito

9
推荐指数
2
解决办法
3031
查看次数

如何为基于json的插件'docker plugin install'

我正在开发一个全新的批量插件,并且需要通过所有的vol-test测试。我已经成功通过了所有测试(在安装了插件的环境中),但第一个测试除外docker plugin install。事实是,有三种可能的方式可以安装自定义插件:

.sock文件是UNIX域套接字。
.spec文件是包含URL的文本文件,例如unix:///other.sock或tcp:// localhost:8080。
.json文件是包含插件完整json规范的文本文件。

我们使用json,这只是实现docker API的REST服务器(用java,spring编写)。它的安装过程很简单:只需将json文件复制到其中/etc/docker/plugins,dockerd就会自动发现它。
当我尝试将插件集成到docker plugin install命令中时,问题就来了。由于它说在这里

Docker首先在您的Docker主机上寻找插件。如果该插件在本地不存在,则将该插件从注册表中拉出。

我们的安装过程不假定连接到私有或公共注册表,因此我们需要第一个docker plugin create命令才能在本地创建插件。这就是我很难理解如何使用基于json的插件做到这一点的地方。根据文档,我需要指定插件的路径。如果我使用它需要一个目录名config.jsonrootfs存在于该目录中。


1 config.json-这是一个配置,它描述.sock格式CONFIGS,而不是.json格式(请纠正我,如果我错了)
2.我如何创建根文件系统,为什么我需要它,如果我的插件仅仅是一个独立的REST服务,它甚至不在容器中?

感谢任何帮助。

java spring docker

8
推荐指数
1
解决办法
216
查看次数

通过AWS Cognito用户池使用Facebook登录

我正在为已经使用AWS Cognito用户池的Angular2-app实施Facebook身份验证。

使用ngx-facebook(https://github.com/zyra/ngx-facebook),我设法使用Facebook和Cognito身份池对自己进行身份验证:

    loginWithFacebook(): void {
        AWS.config.update({region:AWS_CONFIG.REGION});

        this.fb.login()
          .then((response: LoginResponse) => {
            console.log(response.authResponse.accessToken);

            AWS.config.credentials = new AWS.CognitoIdentityCredentials({
              IdentityPoolId: AWS_CONFIG.IDENTITY_POOL_ID,
              Logins: {
                'graph.facebook.com': response.authResponse.accessToken
              }
            });

            AWS.config.credentials.refresh((error) => {
              if (error) {
                  console.error(error);
              } else {
                  console.log('Successfully logged in');
              }
            });
          })
          .catch((error: any) => console.error(error));
      }
Run Code Online (Sandbox Code Playgroud)

但是现在:如何将Facebook用户与现有用户池集成在一起?

有用于登录和注册用户池的功能,最佳的解决方案显然是对Facebook用户也使用现有功能。

后端是无服务器的(Lambdas / API网关),并使用连接到现有用户池的授权器。

amazon-cognito aws-sdk amazon-cognito-facebook

6
推荐指数
1
解决办法
3689
查看次数

Spring Boot Oauth2 授权服务器不接受有效令牌

我在使用 Spring Boot 的 OAuth2 功能设置简单的微服务系统时遇到问题。

我想做的是搭建一个Spring Boot Authorization Server来处理注册、授权和用户数据管理。除此之外,我想设置一个资源服务器来处理应用程序的逻辑。

由于所有数据都与用户 ID 相关,因此资源服务器必须向授权服务器请求 ID。因此,我设置了以下用户信息端点:

@Controller
public class UserInfoEndpoint {

    private UserManagementBean userManagementBean;

    @Autowired
    public UserInfoEndpoint(final UserManagementBean userManagementBean) {
        this.userManagementBean = userManagementBean;
    }

    @GetMapping("/user/me")
    @ResponseBody
    public Principal user(final Principal principal) throws PRPException {
        User user = userManagementBean.loadUser(principal.getName());
        @SuppressWarnings("unused")
        Principal retVal = new Principal() {

            @Override
            public String getName() {
                return user.getId().toString();
            }

            public String getPrimaryEmail() {
                return user.getPrimaryEmail();
            }
        };
        return retVal;
    }

}
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用 JWK 来签署令牌。我可以使用 Postman 访问此端点,在那里我得到以下结果:

{
    "primaryEmail": …
Run Code Online (Sandbox Code Playgroud)

java spring-security spring-boot spring-oauth2

6
推荐指数
1
解决办法
681
查看次数

Maven找不到.git(dotGitDirectory)

我有一个类似于此处提出的问题,但没有答案.在maven项目中有以下结构(标准):

parent-pom - which is a parent for all others
    |_reactor - which is a concrete project, parent-pom is a parent
        |_module_1 - reactor is a parent
        |_module_2
        ...
        |_module_n
Run Code Online (Sandbox Code Playgroud)

git-commit-id-plugin在parent-pom中配置,而在其他任何地方都没有.

直到最近一切都很好:我能够使用mvn clean install分别构建整个reactor项目和所有模块.然后我添加了一个新模块(比如说module_n1),我相信构建一直很好,直到大规模合并.现在我得到以下情况:reactor构建成功,每个模块分别从1到n构建成功.但是module_n1失败并出现以下错误:

 [ERROR] Failed to execute goal pl.project13.maven:git-commit-id-plugin:2.1.7:revision (default) on project module_n1: .git directory could not be found! Please specify a valid [dotGitDirectory] in your pom.xml
Run Code Online (Sandbox Code Playgroud)

reactor模块下有一个.git文件夹.作为一项实验,我将其删除并为其他模块获得相同的错误.

在构建期间,一个特定模块无法找到.git文件夹的原因是什么?

谢谢.

git github maven

5
推荐指数
4
解决办法
1万
查看次数

REST API后端的OAuth2和电子邮件授权

概观

我建立一个RESTful API的应用程序,移动\ Web后端(姑且称之为MyBackendApp)和我正在寻找一个应用程序的用户的身份验证和授权当代的解决方案.后端的主要语言是Java.综观其他应用程序,其中许多人提供了多种身份验证方法的用户:使用外部到App帐户(如Facebook,谷歌,雅虎,的OpenID等)或内部(电子邮件\密码).像Stackoverflow这样的东西在注册\登录.我阅读了很多关于OAuth2的消息来源,我也习惯使用Spring Security来实现内部用户帐户和会话管理.但我很难把两种方法放在一起.

要求

  1. 我希望用户使用以下任一方法登录
    • 与外部(可能是OAuth2)类似Facebook的帐户
    • 使用电子邮件\密码
  2. 基于角色的访问控制API方法.MyBackendApp将具有以下角色:app admin,内容管理员,内容用户,内容创建者,开发者(对于使用MyBackendApp API的其他应用)
  3. 像所有的现代移动应用我想呆的用户登录,直至过期或撤销会话(如果为在当前实现的想法如下所述去的话,就可以撤销凭证来完成).每次打开MyApp的移动应用程序时,我都不希望他登录屏幕

当前的实施思路

的OAuth2

为简单起见,我在这里使用Facebook术语,但假设更一般的含义:来自任何外部提供商的MyBackendApp账户外部认证.
我的理解是,如果用户已经拥有来自Facebook的authToken(他已经使用他的Facebook应用程序登录)存储在他的移动设备中的某个位置,那么只需获取authToken(我相信我在Android SDK中看到了方法,如果我',请纠正我我错了).否则,需要通过标准OAuth过程从提供商(Facebook)接收authToken.
现在,拥有来自提供者MyBackendApp的authToken和密钥可以从令牌中检索用户唯一ID和电子邮件,并且:

  • 如果uniqueId已经在MyBackendApp数据库中,那么用户将被认证,并且MyBackendApp允许或不允许基于用户(由其uniqueId和email定义)角色访问所请求的REST端点.
  • 如果uniqueId不在MyBackendApp数据库中,那么用户正在进行MyBackendApp注册过程,这类似于Stackoverflow注册.他的信息存储在DB用户被分配了一些角色

email\password auth

注册.如果用户没有注册,那么他会经历注册过程:MyBackendApp在DB中存储电子邮件和密码哈希.它还分配一个角色(比如说内容创建者)
登录.如果用户已注册并想要登录

  1. 他在客户端应用程序中输入电子邮件和密码(WebUI JavaScript\Android\iOS)
  2. 客户端应用程序(让我们称之为MyClientApp)从密码中获取哈希(如果不是正确的方法,请更正我)并将其与电子邮件一起通过https发送到MyBackendApp.编辑:在客户端散列密码是没有意义的.而不是密码将通过SSL发送.之后,服务器(MyBackendApp)将生成一个哈希并将其与DB中的存储哈希进行比较.
  3. 有电子邮件和密码MyBackendApp验证用户身份并使用userUniqueId(UUID)发出authToken(可能是JWT),有些过期日期.
  4. 将在每个REST API请求上发送authToken
  5. 下次MyBackendApp收到某些REST端点的请求时,它会检索userUniqueId,expirationDate并基于Role allow\disallow调用.

摘要

  1. 上面"实施思路"部分中描述的方法是否有意义?任何安全威胁?
  2. 有些帖子说OAuth不能用于用户身份验证,例如这里,但我不明白为什么?如果没有,那么如何使用facebook\google\others帐户提供用户登录?
  3. 我绝对不想重新发明自行车,所以我想知道是否有任何框架可以让这项任务变得更容易?我相信Spring Security及其OAuth2支持可以帮助实现OAuth2.但它如何适用于两种类型的登录(OAuth2 +电子邮件\密码)?
  4. 这篇文章建议[Apache Shiro] - 这对于描述的目的是否有用?它可以与Spring Security OAuth2结合使用吗?
  5. 我在上面写道,拥有来自提供商MyBackendApp的authToken和密钥可以检索用户唯一ID和电子邮件 - 但情况如此吗?提供者是否在authToken中包含此信息?
  6. 如果移动设备或网络浏览器的用户已经获得了authToken(例如,他登录了facebook移动应用程序或桌面浏览器存储了他的密码)并且他已经允许在Facebook上使用MyApp - 他可以打开我的应用程序已经登录了他的脸书帐户跳过登录程序?怎么样?

java security spring oauth mobile-application

5
推荐指数
0
解决办法
380
查看次数

Spring Data JPA:插入和选择查询非常慢

我有一个非常简单的 spring-data-jpa + Hibernate 应用程序,它将客户数据存储在 MySql 数据库中(完整的源代码在此处发布)。

问题是它运行插入选择查询的速度非常慢,与我通过 mysql CLI 所拥有的相比:

  • 插入一行大约需要3600 毫秒
  • 全选(仅 2 行)大约需要1700 毫秒
  • 两个查询都在 mysql CLI 中占用大约0.12s

有讨论过类似的问题在这里,但在我的情况的测量方式更糟(尽管我不插入批次,它在DB只是一个简单的行)。有没有办法提高 Spring JPA/Hibernate 的性能?

另一个问题,有没有办法减少 spring-data-jpa 和 hibernate-entitymanager 的大小?我能够在不损害程序的情况下排除字节伙伴和 jandex 依赖项,但这只是几个 Mbs(阴影 jar 大小从 19.6Mb 减少到 16.6Mb)?

更新 根据请求,这里是代码(所有来源都在这里):

@Entity
@AttributeAccessor("field")
@Table(name = "customer")
public class Customer implements Serializable{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name="id",unique=true, nullable=false, insertable=true, updatable=true)
  @Type(type="long")
  private Long id;

  @Column(name …
Run Code Online (Sandbox Code Playgroud)

java mysql spring hibernate jpa

5
推荐指数
0
解决办法
4023
查看次数

运行“mvn test”时设置“test”配置文件

我使用 Spring 将@Profile与测试相关的类与开发和产品分开。我在寻找一种在 pom.xml 中设置spring.profiles.activeto的方法时遇到了麻烦,仅出于目标。换句话说,如果 Maven 目标是我想运行这个:testtesttest

mvn test
Run Code Online (Sandbox Code Playgroud)

仍然可以访问带有 @Profile("test") 注释的类,
而不是这样:

mvn test -Dspring.profiles.active=test 
Run Code Online (Sandbox Code Playgroud)

因为它指定了运行两次的“测试”性质。

有可能吗?

更新:添加代码

以下两项服务用于测试和开发/生产。两者都实现相同的接口 MyService

MyService测试环境:

@Service
@Profile("test")
@ActiveProfiles("test")
public class TestMyServiceImpl implements MyService {
    @Override
  public String myMethod(){
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

MyService 开发环境:

@Service
public class DevMyServiceImpl implements MyService {
    @Override
  public String myMethod(){
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

自动装配 MyService 的控制器:

@RestController
@RequestMapping 
public class MyController {

  @Autowired
  private MyService myService;

@RequestMapping(value = /myendpoint, method = …
Run Code Online (Sandbox Code Playgroud)

java spring maven spring-boot

5
推荐指数
1
解决办法
5508
查看次数