Agora安全令牌生成(Golang)

时间:2020-06-25 17:27:39

标签: security go privileges agora.io agora-web-sdk-ng

着眼于Agora(https://docs.agora.io/en/Interactive%20Broadcast/token_server_nodejs?platform=Node.js)的代币生成。

我们需要在生成令牌时提供用户角色。在Go API中,有4个角色定义:参与者,发布者,订阅者和管理员。

如果使用四种角色中的任何一种来生成令牌,令牌会有什么不同?与会者与订阅者有何不同,发布者与管理员有何不同?

谢谢

1 个答案:

答案 0 :(得分:2)

您所指的Role是一个任意结构,用于建立示例用户层次结构的示例层次结构,这些用户角色可用于设置特权。

如果您查看Agora令牌生成器(Golang example),在Line 42上,它将使用“角色”分配一组特权。

    if (role == RoleAttendee) || (role == RolePublisher) || (role == RoleAdmin) {
        token.AddPrivilege(accesstoken.KPublishVideoStream, privilegeExpiredTs)
        token.AddPrivilege(accesstoken.KPublishAudioStream, privilegeExpiredTs)
        token.AddPrivilege(accesstoken.KPublishDataStream, privilegeExpiredTs)
    }

在代码中,每个角色都具有相同的特权(在生产环境中通常没有用),因此您需要更新代码以具有想要设置的任何用户角色该令牌的适当特权。

此处设置的特权旨在让Agora后端知道用户可以在通道中执行的操作,范围从基本的joinCahnnelpublishStreampublishVideoCdn

可用特权:

type Privileges uint16

const (
    KJoinChannel        = 1
    KPublishAudioStream = 2
    KPublishVideoStream = 3
    KPublishDataStream  = 4

    KPublishAudiocdn           = 5
    KPublishVideoCdn           = 6
    KRequestPublishAudioStream = 7
    KRequestPublishVideoStream = 8
    KRequestPublishDataStream  = 9
    KInvitePublishAudioStream  = 10
    KInvitePublishVideoStream  = 11
    KInvitePublishDataStream   = 12

    KAdministrateChannel = 101
    KLoginRtm            = 1000
)

注意::默认情况下,不强制执行令牌特权,因此您必须提交一张Jira票证(https://agora-ticket.agora.io)才能在您的帐户中启用该请求。