标签: authorization

仅“授权”资源的特定路由

有一种authorizeResource()将特定策略应用于所有路由(索引路由除外)的方法。有没有办法只在特定路由上应用策略,类似于这个功能:

Route::resource('photo', 'PhotoController', ['only' => [
    'index', 'show'
]]);
Run Code Online (Sandbox Code Playgroud)

php authorization laravel

2
推荐指数
1
解决办法
2256
查看次数

从 Http Interceptor 获取授权标头

我已经授权将令牌headers直接放入。我现在如何从 Angular 4 获取这个令牌Http Interceptor

在此处输入图片说明

不幸的是,以下都不console logs包含此标题:

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    //const changedReq = req.clone({headers: req.headers.set('Authorization', 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbkB3cC5wbCIsImV4cCI6MTUxMDY2NDM0M30.0iBktdr4-1EzTi1iaQOOfguK7HGVJF7JYkB-AF3uZgJrmKnVESAyKkHoNRzum1Pq5xZ6GJaZC9cbZQ2umMSfLA')});
    console.log('req', req);
    return next.handle(req).do((event: HttpEvent<any>) => {
      console.log('event', event);
      if (event instanceof HttpResponse) {
        // do stuff with response if you want
      }
    }, (err: any) => {
      if (err instanceof HttpErrorResponse) {
          this.ehs.setService(err.status, err.error);
          // redirect to login
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

authorization header interceptor angular-http-interceptors angular

2
推荐指数
1
解决办法
1941
查看次数

将应用程序属性中的角色列表注入@PreAuthorize

SPEL 有什么技巧,所以我可以在 application.yml 中定义我的管理员角色,然后将它们直接加载到类似的内容中:

@PreAuthorize("hasAnyRole(${my.security.admin-roles-list})")
Run Code Online (Sandbox Code Playgroud)

……?

java spring authorization spring-security spring-boot

2
推荐指数
1
解决办法
1128
查看次数

InvalidOperationException: 未指定 authenticationScheme,在 ASP.NET Core 2.0 中未找到 DefaultChallengeScheme

我在 mvc web 应用程序中使用 ASP.net core 2。我目前在一个控制器操作上从 AD 组授权,到目前为止它在本地主机上运行良好。现在发布后,而不是获取登录窗口,我收到以下错误:

InvalidOperationException: 未指定 authenticationScheme,也未找到 DefaultChallengeScheme。

这就是我授权 AD 角色的方式。

[Authorize(Roles = "Domain Users")]
Run Code Online (Sandbox Code Playgroud)

我需要在 startup.cs 中添加一些东西还是我错过了其他东西?

c# authentication authorization asp.net-core asp.net-core-2.0

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

猫鼬模型更新()与保存()

有一个关于update()vssave()问题,但它针对的是一些不同的东西(我猜,纯粹是相关的mongoose.Schema方法,而不是实际的文档)

我有以下场景,用户登录网站:

  • 我需要加载文档(通过 找到它userModel.email
  • 检查userModel.password哈希值是否与收到的内容匹配
  • 更新userModel.lastLogin时间戳
  • 将授权事件附加到userModel.myEvents[]数组

所以我想知道 -什么是正确的方法?

1)

let foundUser = userModel.findOne({ email: recievedEmail });
if(foundUser.password != recievedPassword)
    return res.status(400).json({e: "invalid pass"});
foundUser.lastLogin = new Date();
foundUser.myEvents.push(authEvent)
foundUser.save();
Run Code Online (Sandbox Code Playgroud)

2)

let foundUser = userModel.findOne({ email: recievedEmail });
if(foundUser.password != recievedPassword)
    return res.status(400).json({e: "invalid pass"});
foundUser.update({
    $push: { myEvents: authEvent },
    $set: { lastLogin: new Date() }
});
foundUser.save();
Run Code Online (Sandbox Code Playgroud)

3)

let foundUser …
Run Code Online (Sandbox Code Playgroud)

passwords authorization mongoose mongodb node.js

2
推荐指数
1
解决办法
4756
查看次数

如何使用客户端 ID 和密码访问 Spotify 的 web api?

我正在尝试编写一个脚本,在 python 中的我的 Spotify 帐户上创建播放列表,从头开始,而不是使用像spotipy这样的模块。

我的问题是如何使用请求模块对我的客户端 ID 和客户端密钥进行身份验证,或者如何使用这些凭据获取访问令牌?

python authorization spotify

2
推荐指数
1
解决办法
4258
查看次数

在 RESTful API 中检查用户权限的最佳实践

我正在为我的公司开发一个内部管理系统。一些 API 路由将检查用户的角色,其余路由将检查用户的权限。

目前,我在做什么是在 JWT 令牌中存储用户的权限

{
  "user": {
    "name": "Oyster Lee",
    "role": "root",
    "image": ""
  },
  "OMS": 2147483647,
  "WMS": 4095,
  "iat": 1566536007,
  "exp": 1567140807,
  "iss": "Test"
}
Run Code Online (Sandbox Code Playgroud)

我的许可是使用按位运算符。但它在每个系统中最多只能使用 31 种权限。我有超过 31 个,因此需要替换按位运算符。

除此之外,在我为用户分配新的权限或角色后,他必须一次又一次地注销和登录。

我在想,每次他们向路由发送请求时,我是否应该检查数据库以获取用户的许可。会不会导致应用更重?有什么优点和缺点吗?顺便说一下,我使用 MySQL 作为我们的数据库。

前端还需要根据用户的权限或角色进行有条件的渲染。我使用 Nuxt.js SPA 作为前端。

authentication authorization node.js express jwt

2
推荐指数
1
解决办法
3145
查看次数

如何在 oauth2 身份验证之上实现用户权限

在使用 IdP 通过 IdP 对其用户进行身份验证的 Web 应用程序中,oauth2用于实现用户权限(客户端和服务器端)的更标准/推荐选项是什么?

通过“用户权限”,我指的是用户在应用程序中允许或不允许执行的操作。
例如,假设应用程序有一个“管理”页面,用于管理应用程序的某些设置,仅允许特定用户进入。其中一些用户仅被允许查看当前设置,而其他用户也被允许更改设置(可能只有其中一些)。

据我所知,oauth2 中“范围”的概念可能用于实现这样的要求,例如,仅被允许查看“管理”页面app:admin:view的用户将具有范围,而可以此外,编辑设置也会有一个app:admin:some-setting:edit范围。
但是,在大多数大型身份提供者服务中,管理这些范围并将它们分配给用户的任务似乎是一项相当乏味的任务。

这会是一个很好的解决方案吗?如果是这样,是否有任何产品/服务与 oauth2 IdP 集成并帮助更轻松地管理权限及其分配给用户(例如,具有漂亮直观的 UI)?如果没有,是否有任何既定方法处理此类情况?

security permissions authorization user-permissions oauth-2.0

2
推荐指数
1
解决办法
2413
查看次数

寻找在 Blazor AuthorizeView 组件中使用多个角色的更好方法

我正在开发一个使用 Blazor 和身份验证/授权的小型应用程序,并且在大多数情况下,基于角色的授权是完美的。但是,我有几个场景需要在 AuthorizeView 组件中授权多个角色,但我不确定我是否以最佳方式执行此操作。我试图避免将字符串值硬编码到组件中,因此我首先设置了一个静态类来管理字符串值,如下所示:

public static class Roles
{
    public const string Admin = "Admin"; 
    public const string CanManageClients = "CanManageClients"; 
    public const string CanManageProjects = "CanManageProjects"; 
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在任何需要的地方使用这些值,对于基于标准属性的授权,我扩展了 AuthorizeAttribute 类以允许我根据需要传递多个值。现在我有一个[AuthorizeRoles]属性可以使用。到目前为止没有问题。我可以用这样的东西装饰整个页面:

@attribute [AuthorizeRoles(Roles.Admin, Roles.CanManageClients)]
Run Code Online (Sandbox Code Playgroud)

以及需要的相关方法装饰:

[AuthorizeRoles(Roles.Admin, Roles.CanManageClients)]
public void DoTheThing()
{
    //Doing things
}
Run Code Online (Sandbox Code Playgroud)

但是,当涉及到 Blazor AuthorizeView 组件时,事情就变得棘手了。Razor 语法不允许我将多个角色链接在一起或插入一个字符串,因此我找到了一种解决方法来完成工作:

<AuthorizeView Roles="@rolesList">
    <Authorized>
        //View related code once authorized
    </Authorized>
</AuthorizeView>
Run Code Online (Sandbox Code Playgroud)

以及产生组件期望的逗号分隔字符串的相关代码块:

@code {
    string rolesList => $"{Roles.Admin}, {Roles.CanManageClients}";
}
Run Code Online (Sandbox Code Playgroud)

这就像它应该的那样工作,让我到达我需要去的地方,但对我来说它看起来和感觉都很糟糕。我已经避免了可怕的魔法字符串场景,但是在支持该组件的代码的另一部分中有一个看起来很奇怪的支持字段。我知道我可以通过转向基于策略或基于声明的系统来解决这个问题,但老实说,对于这个小应用程序来说,这太过分了,因为我只有少数用例。来自社区的任何反馈都将不胜感激,也许我没有在想什么,也许这样就很好了?

authentication authorization blazor

2
推荐指数
1
解决办法
1783
查看次数

如何从代码更新 Blazor 静态布局

我有一个带有侧边栏的主布局,对于授权和非授权用户来说是不同的。我要更新的地方看起来像那样

        <AuthorizeView>
            <Authorized>
                // Personal information matches in this component (it's just one more div this some code in it)
                <UserInfo />
            </Authorized>
            <NotAuthorized>
                <div class="sidebar-unathorized">
                    <span>
                        To get all privileges, <a href="/register"><strong>register</strong></a> or <a href="/login"><strong>login</strong></a> please
                    </span>
                </div>
            </NotAuthorized>
        </AuthorizeView>
Run Code Online (Sandbox Code Playgroud)

用户通过授权后,我希望他看到他的个人信息,所以在我的登录方法中,我做了一些类似的事情

public async void HandleValidSubmit()
{
    ...
   ((CustomAuthenticationStateProvider)authenticationStateProvider).AuthenticateUser(authorizedUser);
   navigationManager.NavigateTo("/");
   //here I want to update the layout
    ...
    return;
}
Run Code Online (Sandbox Code Playgroud)

并在我的 CustomAuthenticationStateProvider 设置当前用户后 NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(user))); ,我希望这足以让所有基于授权的组件进行更新。但事实并非如此。我尝试了 StateHasChanged() 方法,但可以理解的是它不会像那样工作,因为它只是更新触发它的组件。但是,如果您在登录后手动重新加载页面,一切都会好起来的。任何想法如何从代码更新布局?

c# authorization blazor

2
推荐指数
1
解决办法
1170
查看次数